我在游戏中制作了一个天空盒。游戏中有一些太阳系,里面有一些东西(开始时,太阳和地球,背景中有星星)。玩家在这个太阳系中的一个星球上。太阳系使用天空盒向玩家表示,2D精灵投射到相应位置的天空盒上。 Skybox使用OpenGL(实际上是Java的LWJGL)[1]
进行渲染首先,在3D空间中跟踪所有物体。我可以获得它们的坐标,相对方向等。所有轨道都是独立定义的(也就是说,发生在任意平面上)。此外,行星有四元数旋转。以全3D渲染系统,没有问题。
将系统投射到天空盒完全是另一回事。从理论上讲,我认为我应该能够这样做;
1。计算玩家所在的方向向量(完全旋转不相关 - 向量只需指向正确的方向)。
2. 将此方向向量与其行星方向(四元数)相乘以计算"视图方向"
3. 计算从行星到被观察物体的方向向量
4. 找到向量之间的旋转,并相应地旋转天空盒。
然而,当我向OpenGL提供我的角度时,会发生万向节锁定和应该是直线的轨道:全部弯曲(尽管围绕一个单轴的旋转工作正常)。我可以通过哪些方式来防止这种情况发生?我不知所措。
[1]:我的地形实际上是一个扁平的方形体素网格,我将玩家的坐标缩放到它上面,然后假装它是一个3D行星。