2013-10-11 47 views
-1

我在原点有一个正方形。首先,我想旋转它。然后,将它从原点翻译5个单位。根据距离翻译

旋转后我想翻译它的距离为5.但是,当我实现下面的代码。它不会将其转换到我想要的位置。什么是翻译的正确方法。 glTranslatef(5,5, 5); glRotatef(45, x,y,z);

+1

哪些是你第一次在做什么?你说你想旋转然后翻译,但是你发布的代码是以其他顺序。无论哪种方式,尝试颠倒操作的顺序。 –

+0

你不是最接近你先画的东西吗?因为我在glRotatef之后创建了我的广场 – james456

+0

旋转然后翻译一件事。一般来说,如果你想旋转一个对象,你想围绕它的中心旋转对象(这是对象空间< 0, 0, 0 >,但如果你首先翻译你把它扔出窗口)。 –

回答

0

如果您的方形中心位于原点,glTranslatef,然后glRotatef。

以绕定制中心,这里是通式:

TranslationFromRotCenterToOrigin * RotationMatrix * TranslationFromOriginToRotCenter 

其给出以相反的顺序在OpenGL东西(原因的glTranslatef/glRotatef由指定的平移/旋转矩阵乘以当前的OpenGL矩阵)

glLoadIdentity(); 
glTranslatef(5, 5, 5); 
glTranslatef(toRotCenterX, toRotCenterY, toRotCenterZ); 
glRotatef(45, x, y, z); 
glTranslatef(-toRotCenterX, -toRotCenterY, -toRotCenterZ); 

希望这有助于

+0

mine是在原点,所以我做但我没有得到正确的答案 'glTranslatef(Distance/sqrt(3),Distance/sqrt(3),Distance/sqrt(3)); glRotatef(角度,X,Y,Z); ' – james456

+0

是你的方**中心**在原点或你的广场**角** –

+0

也许我们不明白你的问题。你能张贴你得到的和你的期望的快照吗?随意添加快照中的任何信息,例如您期望的翻译和旋转,原点在哪里以及当前视口是什么 –