Вопрос чайника — пытаюсь отрисовать кубик руководствуясь примером compress из sdk,
слегка его изменив чтобы можно было натянуть отдельную текстуру на каждую грань.
Создание vertex'ов:
#define NUM_CUBE_VERTICES (6*4)
#define NUM_CUBE_INDICES (6*2*3)
// Define the normals for the cube
D3DVECTOR n0( 0.0f, 0.0f,-1.0f ); // Front face
D3DVECTOR n1( 0.0f, 0.0f, 1.0f ); // Back face
D3DVECTOR n2( 0.0f, 1.0f, 0.0f ); // Bottom face
D3DVECTOR n3( 0.0f,-1.0f, 0.0f ); // Top face
D3DVECTOR n4( 1.0f, 0.0f, 0.0f ); // Left face
D3DVECTOR n5(-1.0f, 0.0f, 0.0f ); // Right face
// Front face
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f, 1.0f,-1.0f), n0, 0.01f, 0.01f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f, 1.0f,-1.0f), n0, 0.99f, 0.01f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f,-1.0f,-1.0f), n0, 0.99f, 0.99f );
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f,-1.0f,-1.0f), n0, 0.01f, 0.99f );
// Back face
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f, 1.0f, 1.0f), n1, 0.99f, 0.01f );
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f,-1.0f, 1.0f), n1, 0.99f, 0.99f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f,-1.0f, 1.0f), n1, 0.01f, 0.99f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f, 1.0f, 1.0f), n1, 0.01f, 0.01f );
// Top face
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f, 1.0f, 1.0f), n2, 0.01f, 0.01f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f, 1.0f, 1.0f), n2, 0.99f, 0.01f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f, 1.0f,-1.0f), n2, 0.99f, 0.99f );
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f, 1.0f,-1.0f), n2, 0.01f, 0.99f );
// Bottom face
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f,-1.0f, 1.0f), n3, 0.01f, 0.99f );
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f,-1.0f,-1.0f), n3, 0.01f, 0.01f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f,-1.0f,-1.0f), n3, 0.99f, 0.01f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f,-1.0f, 1.0f), n3, 0.99f, 0.99f );
// Right face
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f, 1.0f,-1.0f), n4, 0.01f, 0.01f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f, 1.0f, 1.0f), n4, 0.99f, 0.01f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f,-1.0f, 1.0f), n4, 0.99f, 0.99f );
*pVertices++ = D3DVERTEX( D3DVECTOR( 1.0f,-1.0f,-1.0f), n4, 0.01f, 0.99f );
// Left face
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f, 1.0f,-1.0f), n5, 0.99f, 0.01f );
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f,-1.0f,-1.0f), n5, 0.99f, 0.99f );
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f,-1.0f, 1.0f), n5, 0.01f, 0.99f );
*pVertices++ = D3DVERTEX( D3DVECTOR(-1.0f, 1.0f, 1.0f), n5, 0.01f, 0.01f );
// Set up the indices for the cube
*pIndices++ = 0+0; *pIndices++ = 0+1; *pIndices++ = 0+2;
*pIndices++ = 0+2; *pIndices++ = 0+3; *pIndices++ = 0+0;
*pIndices++ = 4+0; *pIndices++ = 4+1; *pIndices++ = 4+2;
*pIndices++ = 4+2; *pIndices++ = 4+3; *pIndices++ = 4+0;
*pIndices++ = 8+0; *pIndices++ = 8+1; *pIndices++ = 8+2;
*pIndices++ = 8+2; *pIndices++ = 8+3; *pIndices++ = 8+0;
*pIndices++ = 12+0; *pIndices++ = 12+1; *pIndices++ = 12+2;
*pIndices++ = 12+2; *pIndices++ = 12+3; *pIndices++ = 12+0;
*pIndices++ = 16+0; *pIndices++ = 16+1; *pIndices++ = 16+2;
*pIndices++ = 16+2; *pIndices++ = 16+3; *pIndices++ = 16+0;
*pIndices++ = 20+0; *pIndices++ = 20+1; *pIndices++ = 20+2;
*pIndices++ = 20+2; *pIndices++ = 20+3; *pIndices++ = 20+0;
Отрисовка сцены:
m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, D3DFVF_VERTEX,
m_pCubeVertices, 4,
m_pCubeIndices, 6, 0 );
m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, D3DFVF_VERTEX,
m_pCubeVertices + 4, NUM_CUBE_VERTICES — 4,
m_pCubeIndices + 6, 6, 0 );
m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, D3DFVF_VERTEX,
m_pCubeVertices + 8, NUM_CUBE_VERTICES — 8,
m_pCubeIndices + 12, 6, 0 );
m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, D3DFVF_VERTEX,
m_pCubeVertices + 12, NUM_CUBE_VERTICES — 12,
m_pCubeIndices + 18, 6, 0 );
m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, D3DFVF_VERTEX,
m_pCubeVertices + 16, NUM_CUBE_VERTICES — 16,
m_pCubeIndices + 24, 6, 0 );
m_pd3dDevice->DrawIndexedPrimitive( D3DPT_TRIANGLELIST, D3DFVF_VERTEX,
m_pCubeVertices + 20, NUM_CUBE_VERTICES — 20,
m_pCubeIndices + 30, 6, 0 );
Так вот, он зараза рисует три грани, вместо 6-ти..
Где я ошибся, подскажите пожалуйста.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить