Ouais, en fait pour chaque face j'ai 4 fois le même, perpendiculaire à la face ( ce qui à l'air différent sur ton schéma :s )
du coups, si je comprend bien j'ai :
Face HAUT:
vertice1 -> normal : 0, 1, 0
vertice2 -> normal : 0, 1, 0
vertice3 -> normal : 0, 1, 0
vertice4 -> normal : 0, 1, 0
mais je devrais avoir un truc comme :
Face HAUT:
vertice1 -> normal : 0, 1, 0
vertice2 -> normal : 1, 1, 0
vertice3 -> normal : 1, 1, 1
vertice4 -> normal : 0, 1, 1
Et un p'tit bout de code en prime (méthode qui ajoute 1 cube au buffer)
void chunk::createCube ( u16 size, vector3df pos, SColor cubeColor, bool ftFace, bool bkFace, bool rtFace, bool ltFace, bool tpFace, bool bmFace )
{
u32 i=0;
u32 v1=0;
u32 v2=0;
u32 v3=0;
u32 v4=0;
vector3df norm;
vector2d<f32> tcoords(0.0f, 0.0f);
f32 halfSise = (f32)size/2;
vector3df p1(pos.X-halfSise, pos.Y-halfSise, pos.Z+halfSise);
vector3df p2(pos.X+halfSise, pos.Y-halfSise, pos.Z+halfSise);
vector3df p3(pos.X+halfSise, pos.Y+halfSise, pos.Z+halfSise);
vector3df p4(pos.X-halfSise, pos.Y+halfSise, pos.Z+halfSise);
vector3df p5(pos.X+halfSise, pos.Y-halfSise, pos.Z-halfSise);
vector3df p6(pos.X-halfSise, pos.Y-halfSise, pos.Z-halfSise);
vector3df p7(pos.X-halfSise, pos.Y+halfSise, pos.Z-halfSise);
vector3df p8(pos.X+halfSise, pos.Y+halfSise, pos.Z-halfSise);
for (u16 face=0; face<6; face++)
{
// FRONT ( => Vertices )
if (face==0 && ftFace)
{
norm = vector3df(0.0f, 0.0f, 1.0f);
v1=vCount++; buffer->Vertices.push_back( S3DVertex(p1, norm, cubeColor, tcoords) );
v2=vCount++; buffer->Vertices.push_back( S3DVertex(p2, norm, cubeColor, tcoords) );
v3=vCount++; buffer->Vertices.push_back( S3DVertex(p3, norm, cubeColor, tcoords) );
v4=vCount++; buffer->Vertices.push_back( S3DVertex(p4, norm, cubeColor, tcoords) );
}
// BACK ( => Vertices )
if (face==1 && bkFace)
{
norm = vector3df(0.0f, 0.0f, -1.0f);
v1=vCount++; buffer->Vertices.push_back( S3DVertex(p5, norm, cubeColor, tcoords) );
v2=vCount++; buffer->Vertices.push_back( S3DVertex(p6, norm, cubeColor, tcoords) );
v3=vCount++; buffer->Vertices.push_back( S3DVertex(p7, norm, cubeColor, tcoords) );
v4=vCount++; buffer->Vertices.push_back( S3DVertex(p8, norm, cubeColor, tcoords) );
}
// RIGHT ( => Vertices )
if (face==2 && rtFace)
{
norm = vector3df(1.0f, 0.0f, 0.0f);
v1=vCount++; buffer->Vertices.push_back( S3DVertex(p2, norm, cubeColor, tcoords) );
v2=vCount++; buffer->Vertices.push_back( S3DVertex(p5, norm, cubeColor, tcoords) );
v3=vCount++; buffer->Vertices.push_back( S3DVertex(p8, norm, cubeColor, tcoords) );
v4=vCount++; buffer->Vertices.push_back( S3DVertex(p3, norm, cubeColor, tcoords) );
}
// LEFT ( => Vertices )
if (face==3 && ltFace)
{
norm = vector3df(-1.0f, 0.0f, 0.0f);
v1=vCount++; buffer->Vertices.push_back( S3DVertex(p6, norm, cubeColor, tcoords) );
v2=vCount++; buffer->Vertices.push_back( S3DVertex(p1, norm, cubeColor, tcoords) );
v3=vCount++; buffer->Vertices.push_back( S3DVertex(p4, norm, cubeColor, tcoords) );
v4=vCount++; buffer->Vertices.push_back( S3DVertex(p7, norm, cubeColor, tcoords) );
}
// TOP ( => Vertices )
if (face==4 && tpFace)
{
norm = vector3df(0.0f, 1.0f, 0.0f);
v1=vCount++; buffer->Vertices.push_back( S3DVertex(p4, norm, cubeColor, tcoords) );
v2=vCount++; buffer->Vertices.push_back( S3DVertex(p3, norm, cubeColor, tcoords) );
v3=vCount++; buffer->Vertices.push_back( S3DVertex(p8, norm, cubeColor, tcoords) );
v4=vCount++; buffer->Vertices.push_back( S3DVertex(p7, norm, cubeColor, tcoords) );
}
// BOTTOM ( => Vertices )
if (face==5 && bmFace)
{
norm = vector3df(0.0f, -1.0f, 0.0f);
v1=vCount++; buffer->Vertices.push_back( S3DVertex(p6, norm, cubeColor, tcoords) );
v2=vCount++; buffer->Vertices.push_back( S3DVertex(p5, norm, cubeColor, tcoords) );
v3=vCount++; buffer->Vertices.push_back( S3DVertex(p2, norm, cubeColor, tcoords) );
v4=vCount++; buffer->Vertices.push_back( S3DVertex(p1, norm, cubeColor, tcoords) );
}
// ALL ( => Indices )
if (ftFace||bkFace||rtFace||ltFace||tpFace||bmFace)
{
i = buffer->getIndexCount();
buffer->Indices.set_used( i+6 );
buffer->Indices[i++] = v1; buffer->Indices[i++] = v2; buffer->Indices[i++] = v3;
buffer->Indices[i++] = v1; buffer->Indices[i++] = v3; buffer->Indices[i++] = v4;
}
}
}