OpenGL绕点旋转

Posted

技术标签:

【中文标题】OpenGL绕点旋转【英文标题】:OpenGl Rotation around point 【发布时间】:2014-11-02 02:30:49 【问题描述】:

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

我需要围绕radius 旋转一个对象,即radius 远离我已经翻译的位置(getPosition().x/y)。我需要将它旋转 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...

我在 *** 上尝试了 无数 次谷歌搜索和搜索,但没有成功。其中两个“解决方案”来自 *** 本身的答案。

所有这些尝试都围绕原点旋转。我还尝试了许多其他更荒谬的组合,但无济于事。如果重要的话,在这段代码之前一点点,我会翻译矩阵(并且不要将其弹出)。我不认为这是问题所在,因为在这些尝试中的任何一个都不能解决问题之前弹出矩阵并重新推回一个新矩阵。

任何帮助将不胜感激。

【问题讨论】:

glTranslatef 接受三个参数,而不是两个。不知道是不是错字。 @ColonelThirtyTwo 是的,这是一个错字,现在会修正 @ColonelThirtyTwo 所以我尝试了其他几件事,包括隔离一些opengl代码并尝试各种翻译,但无论我做什么,对象都不会围绕一个点旋转。事实上,它甚至不会围绕 任何 点、周期,仅围绕原点旋转。 您的第二次尝试应该可以围绕一个点旋转。我怀疑您在轮换后在某处调用glLoadIdentity,但没有更多代码,我无法确定。 “围绕最左端的中心旋转一个白色正方形”是指围绕其中一侧的中心吗? 【参考方案1】:

所以我找到了解决方案:

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

事实证明,您不必在轮换后必须翻译,这是建议的几个来源。

【讨论】:

以上是关于OpenGL绕点旋转的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL恒定旋转角度

我的OpenGL学习进阶之旅 OpenGL ES 实现不停旋转图片,并保证图片不变形的效果

我的OpenGL学习进阶之旅 OpenGL ES 实现不停旋转图片,并保证图片不变形的效果

OpenGL:glRotatef 旋转啥?

OpenGL 2D旋转问题

立方体旋转 - OpenGL