web-dev-qa-db-ja.com

OpenGLの固定点を中心にオブジェクトを回転させる

この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();

ロボットを、原点の周りではなく、現在配置されているポイントの周りに回転させるにはどうすればよいですか?問題はこのスニペットにあると思います。

11
user2388112

変換後に回転を行うだけです。順序は重要です。

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

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();
13
samsad beagum

翻訳後に回転してみてください:

    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

これを使って

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およびnは、回転させたいオブジェクトの周りのポイントですおよび- xとyは、回転させたいポイントの周りを回転するです。

2
Chandra Kanth