如何根据对象的本地位置/旋转在 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 背景,你有 applyMovement 和 applyRotation(当然还有 worldPosition,worldOrientation) 我觉得我缺少 OpenGL 的一些东西。基本上,我有一个播放器,一个立方体。
我希望立方体使用向上/向下箭头键来回移动,始终位于面对的位置。然后,使用左/右箭头,我希望玩家围绕它的 自己的 原点旋转。所以我最终会得到一个旧的生化危机风格的控制方案(坦克控制)
现在,glTranspose 和 glRotate 可以工作,但取决于我 first 中的哪一个,它似乎朝着正确的方向移动,但会旋转来自世界各地。
或
它围绕自己的轴旋转,但运动总是根据世界轴。
我不想移动/旋转世界或世界+相机,因为我想做第三人称固定相机游戏。基本上,我希望做的事情与 Python 中的 applyMovement/applyRotation 完全相同。但我对如何实现这一点持开放态度。
【问题讨论】:
【参考方案1】:由于您使用立即模式进行渲染,您首先需要 glTranslate 对象中心的负向量,应用旋转,然后 glTranslate 回到它的位置。有效:
glTranslate( -center.x, -center.y, -center.z );
glRotate( ... );
glTranslate( center.x, center.y, center.z );
现在这仅适用于渲染部分。对于移动,您需要跟踪立方体旋转的角度,并使用正弦和余弦将其向前或向后移动。
【讨论】:
以上是关于如何根据对象的本地位置/旋转在 OpenGL 中移动/旋转对象的主要内容,如果未能解决你的问题,请参考以下文章