2013-05-16 6 views
6

У меня есть проблема с этим 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(); 

Что я должен сделать, чтобы мой робот поворот вокруг точки, в которой в настоящее время расположен и не вокруг происхождение? Я думаю, что проблема кроется в этом фрагменте.

ответ

9

Просто сделайте поворот после перевода. Приказ имеет значение.

glTranslatef(xpos, ypos, zpos); 
glRotatef(rotationAngle, 0.0f, 1.0f, 0.0f); 
+0

Чувак это сработало Спасибо, но проблема в круге вокруг вращающегося робота; Я хочу уменьшить радиус BTW. Я вращаю робот на 90 градусов. Только ожидая ответа ура. THANX asap – user2388112

+0

@ user2388112: Я не совсем уверен, что вы имеете в виду, но я думаю, что это должно помочь: вы можете вращаться вокруг любой точки, сначала переведя на эту точку, затем повернув, затем переведем назад (просто возьмите отрицательный результат каждой координаты). Если это не то, что вы ищете, пожалуйста, [задайте новый вопрос об этом] (http://stackoverflow.com/questions/ask), поскольку эти комментарии не являются хорошим местом для расширенного обсуждения. – hammar

3

попробуйте повернуть после перевода:

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(); 
+0

Чувак это сработало Спасибо, но проблема в круге вокруг вращающегося робота; Я хочу уменьшить радиус BTW. Вращающийся робот на 90 градусов. Только в ожидании ответа ура. THANX asap – user2388112

10

Пример вращающегося объекта вокруг его центра вдоль оси г:

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(); 
+2

Этот вопрос старый, и он уже был достаточно отвечен. Новый ответ не добавляет ничего полезного. И те же самые несколько строк кода были представлены как ответ на другие старые вопросы. –

+7

Этот ответ добавляет что-то новое, а именно, что после поворота объект должен быть переведен обратно в исходное положение. Это не упоминалось в других ответах. –

0

Используйте этот

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

, где м и п является точки на объекте, вокруг которого вы хотите повернуть и х и у является точки, вокруг которой вы хотите повернуть.