2014-11-02 109 views
1

我的问题是我需要围绕最左端的中心旋转一个白色正方形,无论我尝试什么,我似乎都无法做到。OpenGl围绕点转动

我需要围绕radius旋转一个对象,这是距离我已经翻译到的位置(getPosition().x/y)远的radius。我需要旋转r度。如果重要,我使用正射影像(glOrtho)投影。

到目前为止,这是我的尝试:

//Try 1 
glRotatef(r, 0, 0, 1.0f); 
glTranslatef(radius, radius, 0); 
glBegin(GL_QUADS) 
//draw here... 

//Try 2 
glTranslatef(-radius, -radius, 0); 
glRotatef(r, 0, 0, 1.0f); 
glTranslatef(radius, radius, 0); 
glBegin(GL_QUADS) 
//draw here... 

//Try 3 
glTranslatef(radius + getPosition().x, radius + getPosition().y, 0); 
glRotatef(r, 0, 0, 1.0f); 
glTranslatef(radius, radius, 0); 
glBegin(GL_QUADS) 
//draw here... 

我曾尝试谷歌搜索和StackOverflow上搜索无数次,没有运气。其中两个“解决方案”来自StackOverflow本身的答案。

所有这些尝试围绕原点旋转。我也尝试了许多其他更无意义的组​​合,无济于事。如果它很重要,那么在此代码之前,我翻译矩阵(并且不要将它弹出)。我认为这不是问题,因为在这些尝试不能解决问题之前,弹出矩阵并重新推回新矩阵。

任何帮助将不胜感激。

+0

'glTranslatef'有三个参数,而不是两个。不知道这是否是错字。 – 2014-11-02 02:51:45

+0

@ColonelThirtyTwo是的,这是一个错字现在将修复 – 2014-11-02 02:58:32

+0

@ColonelThirtyTwo所以我已经尝试了其他一些东西,包括隔离一些opengl代码并尝试各种翻译,但不管我做什么,对象都不会围绕某个点旋转。事实上,它甚至不会绕着__任何点旋转,只会围绕原点旋转。 – 2014-11-02 03:06:55

回答

0

所以我找到了解决办法:

glTranslatef(radius + getPosition().x, radius + getPosition().y, 0); 
glRotatef(r, 0, 0, 1.0f); 
glBegin(GL_POLYGON); 

原来你有翻译后的旋转,这是几个来源建议。