I am assuming that this is because of interpolation of normals. As I say my approach to create this tetrahedron was to use only 4 vertices and let the indices do the rest. Should I actually define 4 faces (12 vertices) and define the normals for each face. I know this latter approach would work but my question is should the former approach also work, or should I reserve the low vertex count solution only for high polygon count objects?

My code for defining the vertices, indices and normal is below:

PrimitiveVertexStruct vertices[]= { { D3DXVECTOR3(0.0f,1.0f,0.0f), WHITE_VECTOR, ZERO_VECTOR3 }, //1 { D3DXVECTOR3(1.0f,-1.0f,0.0f), RED_VECTOR, ZERO_VECTOR3 }, //2 { D3DXVECTOR3(-1.0f,-1.0f,0.0f),BLUE_VECTOR, ZERO_VECTOR3 }, //3 { D3DXVECTOR3(0.0f,0.0f,2.0f), BLACK_VECTOR, ZERO_VECTOR3 }, //4 }; m_numTetraVertices = sizeof(vertices) / sizeof(PrimitiveVertexStruct); m_numTetraIndices=12; DWORD indices[] = { 0,1,3, //1,2,4 1,2,3, //2,3,4 2,0,3, //3,1,4 0,2,1 //1,3,2 }; //compute average normals for(int i=0;i<m_numTetraVertices;i++) { //indices of triangle int i0=indices[i*3+0]; int i1=indices[i*3+1]; int i2=indices[i*3+2]; //vertices of triangle D3DXVECTOR3 v0=vertices[i0].Pos; D3DXVECTOR3 v1=vertices[i1].Pos; D3DXVECTOR3 v2=vertices[i2].Pos; //compute face normal D3DXVECTOR3 e0=v1 - v0; D3DXVECTOR3 e1=v2 - v0; D3DXVECTOR3 normal; D3DXVECTOR3 cross; D3DXVec3Cross(&normal, &e0, &e1); //add to any existing normals for that vertex vertices[i0].Normal+=normal; vertices[i1].Normal+=normal; vertices[i2].Normal+=normal; }

**Edited by benp444, 12 July 2012 - 06:43 PM.**