Bon, en gros comme ça dans le lot, ta méthode dessiner possède quelques moins, je vais ajouter ce qu'il faut (ce qui me semble manquant)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
void Personnage::dessiner()
{
glMatrixMode( GL_MODELVIEW );
glPushMatrix();
glLoadIdentity();
glTranslated(p_position.x,p_position.y,p_position.z);
p_arme->dessiner();
p_repere->dessiner();
glPopMatrix();
glLineWidth(3);
glPushMatrix();
glLoadIdentity()
glBegin(GL_LINES);
glColor3ub(0,255,0); glVertex3d(0,0,0);
glVertex3d(p_position.x,p_position.y,0);
glEnd();
glPopMatrix();
glLineWidth(1);
} |
Je constate par ta méthode (ton implémentation) que t'as pas bien pigé le principe des piles des matrices, ce n'est pas bien grave, je vais essayer de te l'expliquer:
1-Tu choisis le mode de matrice (GL_MODELVIEW ou autre).
2-Tu empiles la matrice courante (glPushMatrix()) selon le cas.
3-Tu mets la matrice courante à l'identité (glLoadIdentity()).
4-Tu fais ce que tu veux (glVertex3*, glDrawElements ...)
5-Tu remets en place l'ancienne matrice (glPopMatrice()).
ça marche comme ça tout le temps, si tu pop une matrice sans la pusher avant, t'auras une pile de matrices incohérente, et du coup, un résultat qui n'est pas souhaité (généralement n'importe quoi).
Voila, revis un peu tes autres fonction dessiner

Partager