如何在 OpenGL 中更改旋转中心

Posted

技术标签:

【中文标题】如何在 OpenGL 中更改旋转中心【英文标题】:How to change the Center-of-Rotation in OpenGL 【发布时间】:2009-07-15 10:08:07 【问题描述】:

我有一个 3D 模型(OpenGL ES 1.1 iPhone SDK v3.0),它有点复杂(即数千个顶点和面),我想围绕模型中心或模型中心附近的 Y 轴旋转此模型。问题是 glRotate 将我的模型围绕 其底部边缘之一的中心处/附近的一个点旋转,而不是在模型的中心附近。想象一辆汽车绕着灯柱绕着很近的圈子行驶,这基本上就是我所拥有的。我希望汽车被刺穿在灯柱上并围绕它旋转。 (下面的一些来源)

   // BLUE BLOCK----------------------------------------------
    glPushMatrix();
    
        glTranslatef(blueLocation[0], blueLocation[1], blueLocation[2]);
        glRotatef(blueRotAngle, 0.0, 0.0, 1.0);
        ...

问题:有没有一种简单的方法可以在 OpenGL 中更改旋转中心?

【问题讨论】:

能否也给我们看一下绘制汽车的代码? 【参考方案1】:

当然。向下平移对象。然后旋转它。

【讨论】:

由于游戏中的限制,我无法重新定位模型。所以,我不能翻译。我会在几秒钟内更新一些源代码.. 翻译它,使您要旋转的点位于原点,然后旋转,然后将其翻译到您想要的位置。 @John,这将使它绕新原点运行,而不是围绕“自身”旋转(想想年而不是日)。 翻译 >> 旋转 >> 翻译回来工作。谢谢! 不会假装理解数学......但你的解决方案帮助了我@RexOnRoids【参考方案2】:

值得记住的是,OpenGL 中的所有操作都是相对于原点进行的。您不能“更改 OpenGL 中的旋转中心”。您相对于该原点移动世界。

【讨论】:

他在谈论网格的旋转中心,您绝对可以翻译它,然后围绕网格的新“原点”旋转。 (见接受的答案) 接受的答案是相对于世界原点平移,旋转然后平移回来。正是我所说的。如果你不明白 OpenGL 是如何工作的,那我帮不了你。【参考方案3】:

您应该使用您的模型 API 来更改 model 来源。如果您能说出您使用的是哪一个,也许我可以提供更多帮助。

如果您可以访问可以编辑模型的软件,则可以直接在模型文件中修复该问题并从代码中删除任何黑客攻击。

【讨论】:

以上是关于如何在 OpenGL 中更改旋转中心的主要内容,如果未能解决你的问题,请参考以下文章

如何在opengl的3d空间中旋转单个形状?

在opengl中翻译相机有问题

如何在中心更改opengl的Point坐标

在 OpenGL 上单击鼠标时无法旋转和更改对象的颜色

在opengl中找到旋转的图像中心

如何在OpenGL中计算三角形网格的顶点法线?