我正试图用现代的OpenGL制作一些类似——姑且称之为飞行模拟器的东西。我试图用偏航,俯仰和滚动来旋转我的平面物体。但是看起来物体围绕全局坐标系旋转(我的意思是如果我的物体面向矢量(0,0,1),滚动操作就像它应该的那样工作,但是如果我把它面向例如(1,0,0),它的行为就像俯仰)
我的变换矩阵是这样计算的:
transformation_matrix = perspective_projection_matrix *
camera_rotation_matrix *
camera_translation_matrix *
translation_matrix *
rotation_matrix *
scale_matrix;
旋转矩阵是
rotation_matrix = rotation_z * rotation_y * rotation_x;
我试图在平移之前添加局部旋转矩阵,但它看起来更糟(对象现在在空间中的某个点周围飞行,始终面向默认值)
在局部坐标系中,我应该做什么来旋转像典型平面一样的物体,包括偏航、俯仰和滚动?
编辑
我还注意到旋转是在全局坐标系中执行的,相机位置为 (0,0,0) 不是这样,我的坏
平面的方向最终将是围绕不同轴的许多离散旋转的串联。这与简单地对各个旋转求和不同。他们不是独立的。
例如,如果向上倾斜90度、滚动90度,然后向下倾斜90度,则生成的方向将不是90度的滚动,而是90度的偏航。
相反,保持一个表示平面方向的恒定矩阵,然后根据需要对其应用滚动、俯仰和偏航旋转。