Bonjour,
J'ai un problème avec mes rotations. Elles ne s'effectuent que sur un demi-cercle. J'ai implémenté une classe Transform3D et en pensant que l'erreur venaient de là, je l'ai désactivée pour tester mes rotations directement avec les fonctions glRotated d'OpenGL. Mais le soucis persiste.
Voici ma configuration OpenGL qui est assez minimal :
void GLContext::resetGLStates() const
{
glMatrixMode(GL_PROJECTION); // La matrice courante devient la matrice de projection
glLoadIdentity(); // initialise la matrice courante
//glLoadMatrixf(mView3D.getTransform3D().getMatrix());
glOrtho(0,1024,768,0,0,500);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
Ensuite ma fonction draw :
void SkeletonMD5::draw(sf::RenderTarget& target, RenderGLStates states3D) const
{
if(m_modelMD5)
{
//glLoadMatrixf(states3D.transform3D.getMatrix());
// Test avec les glTransfo
glLoadIdentity();
glTranslated(500,500,0);
glRotated(135,0,1,0);
glRotated(90,1,0,0);
//**********************
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_texture->getTextureID());
glEnableClientState (GL_VERTEX_ARRAY); // activer le tableau pour la position des sommets
glEnableClientState (GL_TEXTURE_COORD_ARRAY); // activer le tableau pour les coordonnées de texture des sommets
glEnableClientState (GL_NORMAL_ARRAY); // activer le tableau des normales
vector<mesh> meshes = m_modelMD5->getMeshes();
Skeleton skeleton = m_modelMD5->getSkeleton();
// Dessiner le modèle
for (int i = 0; i < m_modelMD5->getNumMeshes(); ++i)
{
prepareMesh(i,meshes,skeleton); // calculer la position des sommets à partir des vertex weights
glVertexPointer (3, GL_FLOAT, 0, &meshes[i].vertexArray[0]);
glTexCoordPointer(2, GL_FLOAT, 0, &meshes[i].textureArray[0]);
glNormalPointer(GL_FLOAT, 0, &meshes[i].normaleArray[0]);
glDrawElements (GL_TRIANGLES, meshes[i].numTris * 3,
GL_UNSIGNED_INT, &meshes[i].vertexIndices[0]);
}
glDisableClientState (GL_VERTEX_ARRAY);
glDisableClientState (GL_TEXTURE_COORD_ARRAY);
glDisableClientState (GL_NORMAL_ARRAY);
}
}
Resultat de l'affichage en modifiant les paramètres de la rotation sur l'axe Y :
glRotated(45,0,1,0) :
glRotated(90,0,1,0) :
glRotated (135,0,1,0) : ( le personnage ne tourne jamais le dos
)
J'ai déjà utilisé mon loader MD5 et j'utilise cette même boucle for pour dessiner mes modèles dans un très ancien projet et je sais que j'ai déjà sû les faire tourner correctement. Enfin, ça m'énerve, je vois pas du tout ce qui cloche. Si quelqu'un aurait une idée ?