Recently I have studied the source code of pyrogenesis engine. And there're few confusing implementation.
For example in the function "CPatchRData::BuildIndices" I can see indices in clockwise order - [0,0] -> [1,0] -> [0,1] -> [1,0] -> [1,1] -> [0,1]
for (ssize_t j = 0; j < PATCH_SIZE; j++)
{
for (ssize_t i = 0; i < PATCH_SIZE; i++)
{
if (texgrid[j][i] == tex)
{
bool dir = terrain->GetTriangulationDir(px+i, pz+j);
if (dir)
{
indices.push_back(u16(((j+0)*vsize+(i+0))+base));
indices.push_back(u16(((j+0)*vsize+(i+1))+base));
indices.push_back(u16(((j+1)*vsize+(i+0))+base));
indices.push_back(u16(((j+0)*vsize+(i+1))+base));
indices.push_back(u16(((j+1)*vsize+(i+1))+base));
indices.push_back(u16(((j+1)*vsize+(i+0))+base));
}
else
{
indices.push_back(u16(((j+0)*vsize+(i+0))+base));
indices.push_back(u16(((j+0)*vsize+(i+1))+base));
indices.push_back(u16(((j+1)*vsize+(i+1))+base));
indices.push_back(u16(((j+1)*vsize+(i+1))+base));
indices.push_back(u16(((j+1)*vsize+(i+0))+base));
indices.push_back(u16(((j+0)*vsize+(i+0))+base));
}
}
}
}
However the default triangle winding of OpenGL is counter-clockwise. Anyway in the Atlas editor the terrain is stil visible with front faces up.
I wonder whether such implementation is rectified with projection matrix and orientation matrix, Or this is just my misunderstanding in some point?
Hope that some expert can provide help. I really appreciate that!