如何在 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 中更改旋转中心的主要内容,如果未能解决你的问题,请参考以下文章