c++ - 为太空模拟器/游戏旋转 spaceship 模型

标签 c++ linux opengl 3d sdl

一段时间以来,我一直在研究太空模拟游戏。 起初,我使用自己的 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 度,然后再将其“向上”旋转,则无法正常工作。 相反,它会滚动。

这是一张说明我的问题的图片。

Image Link

我尝试了几种技巧来尝试解决这个问题,但不知何故我觉得我遗漏了什么。 几乎不可能找到模拟器样式旋转示例也无济于事。

所以我正在搜索示例、链接和旋转 3d 模型(如宇宙飞船、飞机)的理论。

我是否应该使用 3 个 vector (左、上、前)来确定方向,因为我还必须从模型的角度计算推进器的加速度和会随着旋转(方向?)而改变的东西指向一个像火箭发动机一样的方向。

我的数学不是很好,试图想象一个解决方案只会让人头疼

最佳答案

我不确定我是否完全理解这种情况,但听起来您可能在描述 gimbal lock .您可能想看看使用 quaternions代表你的轮换。

关于c++ - 为太空模拟器/游戏旋转 spaceship 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1217775/

相关文章:

linux - MongoDB 进程每天都在关闭。如何在服务器中永远运行 mongod?

linux - 如果字符出现在特定位置,则提取整行

c++ - 使用 OpenGL 旋转正方形后能否获取其顶点?

c++ - UTF8 文本编码 - Windows Phone 8.1 C++

c++ - 如何将从 Google AddressSanitizer 抛出的错误记录到日志文件中

php - 替换php文件中的变量

java - java中的3D运动图

c++ - GLSL 点积问题

c++ - Windows WMI - 获取多个 MAC 地址

python - 在 C++ (Cython) 中运行带参数的已编译 python 脚本