1

我正在我的游戏中制作一个天空盒。游戏中有一个太阳系,里面有一些东西(首先是太阳和地球,背景是星星)。玩家在这个太阳系的一个星球上。太阳系使用天空盒向玩家展示,2D 精灵投影到天空盒的相应位置。Skybox 是用 OpenGL 渲染的(实际上是 Java 的 LWJGL)[1]

首先,所有身体都在 3D 空间中进行跟踪。我可以获得它们的坐标、相对方向等。所有轨道都是独立定义的(又名,发生在任意平面上)。此外,行星具有四元数旋转。以全 3D 渲染系统,没有问题。


将系统投影到天空盒完全是另一回事。从理论上讲,我认为我应该能够这样做;

1.计算玩家正在看的方向向量(完全旋转无关 - 向量只需指向正确的方向)。

2.将这个方向向量乘以他们行星的方向(四元数)来计算“观察方向”

3.计算从行星到被观察物体的方向矢量

4.找到向量之间的旋转,并相应地旋转天空盒。


但是,当我向 OpenGL 提供我的角度时,会发生 Gimbal Locking 并且轨道应该是直的:完全弯曲(尽管围绕一个单轴旋转可以正常工作)。我可以通过哪些方式尝试防止这种情况发生?我不知所措。

[1]:我的地形实际上是一个扁平的方形体素网格,我将玩家的坐标缩放到它上面,然后假装它是一个 3D 星球。

4

0 回答 0