web-dev-qa-db-fra.com

Rotation d'un objet autour d'un point fixe dans opengl

J'ai un problème avec ce code openGL:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix(); // put current matrix on stack

//glTranslatef(0.0f, 0.0f, 0.0f);   
//glTranslatef(-4*1.5, 0.0, 4*1.5);

glRotatef(rotationAngle, 0.0f, 1.0f, 0.0f); // rotate the robot on its y-axis
glTranslatef(xpos, ypos, zpos);
DrawRobot(xpos, ypos, zpos); // draw the robot
glPopMatrix();

Que dois-je faire pour que mon robot tourne autour du point où il se trouve actuellement et non autour de l'origine? Je pense que le problème réside dans cet extrait.

9
user2388112

Faites simplement la rotation après la traduction. L'ordre compte.

glTranslatef(xpos, ypos, zpos);
glRotatef(rotationAngle, 0.0f, 1.0f, 0.0f);
11
hammar

Exemple de rotation d'un objet autour de son centre le long de l'axe z:

glPushMatrix();

glTranslatef(250,250,0.0); // 3. Translate to the object's position.

glRotatef(angle,0.0,0.0,1.0); // 2. Rotate the object.

glTranslatef(-250,-250,0.0); // 1. Translate to the Origin.

// Draw the object
glPopMatrix();
11
samsad beagum

essayez de tourner après traduction:

    glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix(); // put current matrix on stack

//glTranslatef(0.0f, 0.0f, 0.0f);   
//glTranslatef(-4*1.5, 0.0, 4*1.5);

glTranslatef(xpos, ypos, zpos);
glRotatef(rotationAngle, 0.0f, 1.0f, 0.0f); // rotate the robot on its y-axis
DrawRobot(xpos, ypos, zpos); // draw the robot
glPopMatrix();
3
EyadMhanna

Utilisez ceci

house();

glTranslatef(x, y, 0.0); // 3. Translate back to original
glRotatef(theta, 0.0, 0.0, 1.0); // 2. Rotate the object around angle
glTranslatef(-m, -n, 0.0); // 1. Move to Origin

house();

m et n sont le point de l'objet sur lequel vous souhaitez faire pivoter et x et y sont les points autour desquels vous voulez faire pivoter .

0
Chandra Kanth