problème de rotation openGL

wraitii

Membre enregistré
3 Avril 2007
4
0
J'ai fait un screen saver ou un avion se déplace selon X et tourne selon Y.

Je le fait se diriger vers un point nommé loctarget, ou je veut mettre un carré.

(si vous voyez togo, c'est normal, sa remplace mon loctarget après calcul)

Seulement mon carré se déplace avec l'avion au lieu de rester sur place. Comment faire pour annuler la commande glrotatef et la commande gltranslatef?

voila mon code en gros(avec des trucs en moins pour alléger):

la fonction qui crée le cube + la fonction de dessin
Bloc de code:
 - (void) newcube
{
glTranslatef( loctarget, -3.0f, (50.0f + versz));
glRotatef( 180.0, 0.0f, 1.2f, 0.0f );
glBegin(GL_QUADS);
{
glColor3f(1.0f,0.5f,0.0f);			// Set The Color To Orange
		glVertex3f( 1.0f,-1.0f, 1.0f);			// Top Right Of The Quad (Bottom)
		glVertex3f(-1.0f,-1.0f, 1.0f);			// Top Left Of The Quad (Bottom)
		glVertex3f(-1.0f,-1.0f,-1.0f);			// Bottom Left Of The Quad (Bottom)
		glVertex3f ... (plein d'autre)
}
glEnd();
}



- (void)drawRect:(NSRect)rect
{  
  [super drawRect:rect];

  [[glView openGLContext] makeCurrentContext];

		GLfloat airplaneColor[4] = {.25, .25, .25, 1};
	glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); 
	glLoadIdentity();	
  glTranslatef( togo, 1.0f, -15.0f );
  glRotatef( 180.0, togoy, 1.2f, 0.0f );

    
	
	glPushMatrix();
    glTranslatef(0, 0.6, 1.3);
    glScalef(3, .1, 1.5);
	glColor4f(0.50,0.50,0.0,1.0);
    gluSphere(quadric, 1, 10, 10);
    glPopMatrix();

    glPushMatrix();
    glTranslatef(0, 0, -2.5);
	glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE, airplaneColor);  
	glColor4f(0.2,0.4,0.4,1.0);
    gluCylinder(quadric, .5, .5, 5, 10, 1);
	

    glPushMatrix();
    glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE, airplaneColor);  
    glTranslatef(0, 0, 5);
    gluCylinder(quadric, .5, 0, 2, 10, 3);
    glPopMatrix();


    glBegin(GL_TRIANGLES);
(le triangle)
	glBegin(GL_TRIANGLES);
(le triangle)
    glEnd();
    glRotatef(180, 0, 1, 0);
    gluDisk(quadric, 0, .5, 10, 10);

    glPopMatrix();
glMaterialfv(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE, airplaneColor);  
[ self newcube ];
  glFlush(); 
}

Merci d'avance
 
Ca remonte à loin tout ça... et je n'ai pas la doc d'OpenGL sous le coude, et j'ai même pas testé ton code.

D'après mes souvenirs, glTranslate() et glRotate() modifient la matrice de transformation pour les constructions que tu fais après.
Tu peux revenir à une matrice de transformation neutre en faisant un glLoadIdentity().

De plus, il me semble qu'il te manque un glPopMatrix dans ton code.
 
Vu qu'apparement on peut pas éditer:

J'ai trouvé, je dois le reconnaitre, un peu par hasard, comment faire grace au loadidentity.
merci Céroce de ton aide
 
Content d'avoir pu (vraiment) aider quelqu'un pour une fois :p
Un conseil, achète-toi un bouquin sur OpenGL. Il y a certes beaucoup de doc sur le net, mais peu qui expliquent correctement ces histoires de matrices, de textures ou encore d'optimisation (qui devient rapidement un gros problème, tu vas voir).
 
Content d'avoir pu (vraiment) aider quelqu'un pour une fois :p
Un conseil, achète-toi un bouquin sur OpenGL. Il y a certes beaucoup de doc sur le net, mais peu qui expliquent correctement ces histoires de matrices, de textures ou encore d'optimisation (qui devient rapidement un gros problème, tu vas voir).

Je me suis acheté un bouquin a 40 € sur php, et va falloir que je relance mon ptuit traffic de crevette si je veux continuer....

Mais je comptais le faire:up: