提问者:小点点

OpenGL -对象局部旋转


我正试图用现代的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) 不是这样,我的坏


共1个答案

匿名用户

平面的方向最终将是围绕不同轴的许多离散旋转的串联。这与简单地对各个旋转求和不同。他们不是独立的。

例如,如果向上倾斜90度、滚动90度,然后向下倾斜90度,则生成的方向将不是90度的滚动,而是90度的偏航。

相反,保持一个表示平面方向的恒定矩阵,然后根据需要对其应用滚动、俯仰和偏航旋转。

相关问题