2016-10-01 294 views
0

我在Minecraft中制作了一个小型测试模块,玩家可以在自由空间中飞行一架小型飞机。旋转矩阵的反向顺序

的Minecraft适用相机转换为

glRotatef(pitch, 0, 0, 1); 
glRotatef(yaw, 0, 1, 0); 
glRotatef(roll, 1, 0, 0); 

然而,在此设置中,辊应用最后,这最终使平面摆在世界空间间距,而不是施加滚后,使银行不可能。

我已经想通了,为了使银行工作,我应该申请的转换以相反的顺序,即

glRotatef(roll, 1, 0, 0); 
glRotatef(yaw, 0, 1, 0); 
glRotatef(pitch, 0, 0, 1); 

有一些方法,给出滚动,偏航和变桨,在的顺序 ,以获得更正后的值以恢复原来的Minecraft相机转换,以实现相同的最终旋转(基本上,使平面使用自己的相对轴而不是世界轴旋转)?

+0

它可以完成,但它可能不会成为你想要的。为了清楚起见,给定了三个参数,然后是偏摆然后是间距,您需要计算三个参数,即俯仰 - 偏航 - 后滚,这将产生相同的方向,是吗? – Beta

回答

1

无论如何,您可能想要维持相机在不同表示中的旋转(无论是作为四元数还是旋转矩阵)。这样,您可以添加另一个旋转,并且不需要打扰旋转的轴。它将始终在飞机的本地坐标系中(如果正确)。

一旦你决定了一个表示,你可以将其转换回欧拉角,例如, convert quaternions to Euler angles。你应该知道角度的旋转顺序。由于有几个选项,您需要适合您的订单的转换。