一段时间以来,我一直在研究太空模拟游戏。 起初,我使用自己的 3d 引擎和软件光栅器。
但是当实现纹理的时间到了时,我放弃了。 现在我在一段时间后重新开始,现在我正在使用 Opengl(带有 SDL)来渲染 3d 模型。
但现在我又碰壁了。
我不知道如何进行正确的旋转。 作为一个空间模拟器,我想要与飞行模拟类似的控制
使用
glRotatef(angleX, 1.0f, 0.0f, 0.0f);
glRotatef(angleY, 0.0f, 1.0f, 0.0f);
glRotatef(angleZ, 0.0f, 0.0f, 1.0f);
或类似的,
如果我先将模型(宇宙飞船)向左旋转 90 度,然后再将其“向上”旋转,则无法正常工作。
相反,它会滚动。
这是一张说明我的问题的图片。
我尝试了几种技巧来尝试解决这个问题,但不知何故我觉得我遗漏了什么。 几乎不可能找到模拟器样式旋转示例也无济于事。
所以我正在搜索示例、链接和旋转 3d 模型(如宇宙飞船、飞机)的理论。
我是否应该使用 3 个 vector (左、上、前)来确定方向,因为我还必须从模型的角度计算推进器的加速度和会随着旋转(方向?)而改变的东西指向一个像火箭发动机一样的方向。
我的数学不是很好,试图想象一个解决方案只会让人头疼
最佳答案
我不确定我是否完全理解这种情况,但听起来您可能在描述 gimbal lock .您可能想看看使用 quaternions代表你的轮换。
关于c++ - 为太空模拟器/游戏旋转 spaceship 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1217775/