如何根据对象的本地位置/旋转在 OpenGL 中移动/旋转对象

Posted

技术标签:

【中文标题】如何根据对象的本地位置/旋转在 OpenGL 中移动/旋转对象【英文标题】:How to move/rotate an object in OpenGL according to it's local position / rotation 【发布时间】:2015-04-23 16:56:00 【问题描述】:

进入 C++ 和 OpenGL,来自 Python 背景,你有 applyMovementapplyRotation(当然还有 worldPosition,worldOrientation) 我觉得我缺少 OpenGL 的一些东西。基本上,我有一个播放器,一个立方体。

我希望立方体使用向上/向下箭头键来回移动,始终位于面对的位置。然后,使用左/右箭头,我希望玩家围绕它的 自己的 原点旋转。所以我最终会得到一个旧的生化危机风格的控制方案(坦克控制)

现在,glTransposeglRotate 可以工作,但取决于我 first 中的哪一个,它似乎朝着正确的方向移动,但会旋转来自世界各地。

它围绕自己的轴旋转,但运动总是根据世界轴。

我不想移动/旋转世界或世界+相机,因为我想做第三人称固定相机游戏。基本上,我希望做的事情与 Python 中的 applyMovement/applyRotation 完全相同。但我对如何实现这一点持开放态度。

【问题讨论】:

【参考方案1】:

由于您使用立即模式进行渲染,您首先需要 glTranslate 对象中心的负向量,应用旋转,然后 glTranslate 回到它的位置。有效:

glTranslate( -center.x, -center.y, -center.z );
glRotate( ... );
glTranslate( center.x, center.y, center.z );

现在这仅适用于渲染部分。对于移动,您需要跟踪立方体旋转的角度,并使用正弦和余弦将其向前或向后移动。

【讨论】:

以上是关于如何根据对象的本地位置/旋转在 OpenGL 中移动/旋转对象的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 GLM 在 OpenGL 中正确计算旋转

opengl 在屏幕上渲染之前旋转对象以设置其正确的面

如何根据对象位置旋转图像?

在OpenGL中围绕特定点旋转对象

在OpenGL中沿对象后面的方向旋转相机

如何在 OpenGL 中围绕 Z 轴中心旋转对象?