我如何将这些3D相机三角方程转换为在新轴上工作

本文关键字:转换 新轴 工作 三角方程 相机 3D | 更新日期: 2023-09-27 18:13:55

下面的函数计算我的FPS相机的目标矢量,并将其放入OpenGL LookAt方法中。相机方向(以弧度为单位)(0,0,0)表示相机在负方向上平行于z轴,相机右向量在正方向上平行于x轴。

    static Matrix4 GetViewMatrix()
    {
        Vector3 cameraup = Vector3.Transform(Vector3.UnitY,(Quaternion.FromAxisAngle(LineOfSightVector, Orientation.Z)));
        LineOfSightVector.X = (float)(Math.Sin((float)Orientation.X) * Math.Cos((float)Orientation.Y));
        LineOfSightVector.Y = (float)Math.Sin((float)Orientation.Y);
        LineOfSightVector.Z = (float)(Math.Cos((float)Orientation.X) * Math.Cos((float)Orientation.Y));
        return Matrix4.LookAt(Position, Position + LineOfSightVector, cameraup) * View;  //View = createperspectivefield of view matrix4
    }

当相机y轴为(0,1,0)时效果良好。然而,我已经引入了一个Z值,我的相机方向(滚动)。我用它来得到"向上"向量。我现在需要调整LineOfSightVector的3个三角方程,以考虑到"向上"向量的变化,这样相机控制就会朝着正确的方向运行。谁能给我点建议吗?

谢谢

我如何将这些3D相机三角方程转换为在新轴上工作

lineOfSight = vec3(sin(phi)*cos(ksi), sin(ksi), cos(phi)*cos(ksi));

可以按如下方式计算右方向和上方向:

right = vec3(cos(phi)*cos(ksi), 0, -sin(phi)*cos(ksi));
up = cross(lineOfSight, right);
up = normalize(up);

请注意,在这种模型情况下,cos(ksi) == 0应单独处理