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

标签 python c++ opengl

接触 C++ 和 OpenGL,来自 Python 背景,您有 applyMovementapplyRotation(当然还有 worldPosition,< em>worldOrientation) 我觉得我在 OpenGL 中遗漏了一些东西。基本上,我有一个播放器,一个立方体。

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

现在,glTransposeglRotate 可以工作,但是取决于我首先 做的哪一个,它似乎朝着正确的方向移动,但是旋转围绕世界起源。

它绕着自己的轴旋转,但运动总是按照世界轴。

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

最佳答案

由于您使用即时模式进行渲染,因此您首先需要对对象中心的负 vector 进行 glTranslate,应用旋转,然后 glTranslate 回到其位置。有效地:

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

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

关于python - 如何根据本地位置/旋转在 OpenGL 中移动/旋转对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29829908/

相关文章:

c++ - std::thread :如何在类主体中将线程声明为普通成员?

c++ - C++读取文件

c++ - Qt 槽不在多线程 DLL 中执行

visual-studio-2010 - OpenGL GLUT 窗口很慢,为什么?

c++ - 如何在OpenGL中绘制连接两点的圆柱体

python - "AttributeError: ' 模块 ' has no attribute ' 播放器 '"尝试使用 Boost::Python 将 python 对象加载到 C++ 中时

python - 为多个参数接受多个值会导致意外结果

python - 如何使计算循环易于分割和恢复?

python - 如何在 Altair 的 HConcatChart 中配置图表位置

opengl - OpenGL : SuperBible Tutorial 期间的链接器错误