如何转换MatrixCamera';s设置为ProjectionCamera

本文关键字:设置 ProjectionCamera MatrixCamera 何转换 转换 | 更新日期: 2023-09-27 18:28:48

如何将MatrixCamera的设置转换为ProjectionCamera

我的代码看起来像:

            var vm = new Matrix3D(matrixarray[0], matrixarray[1], matrixarray[2], matrixarray[3], matrixarray[4],
                              matrixarray[5], matrixarray[6], matrixarray[7], matrixarray[8], matrixarray[9],
                              matrixarray[10], matrixarray[11], matrixarray[12], matrixarray[13],
                              matrixarray[14], matrixarray[15]);


        var pm = this.CreateFrustumMatrix(frustumArray[0], frustumArray[1], frustumArray[2], frustumArray[3],
                                          frustumArray[4], frustumArray[5]);
        var mc = new MatrixCamera(vm, pm);

但是我想使用ProjectionCamera,所以,我想将其转换为ProjectionCamera

如何转换MatrixCamera';s设置为ProjectionCamera

ProjectionCameraPerspectiveCameraOrthographicCamera共享的抽象类。

如果需要透视(远处的对象看起来更小),则构造PerspectiveCamera,否则构造OrthographicCamera

您需要look vectorup vectoreye pointfield of view来构造这两个相机中的任何一个。您可以直接从视图矩阵(look、up和eye)和投影矩阵(fov)中的行中获取这些向量。

使用您的视图矩阵:

Look: <m13, m23, m33>
Up:   <m12, m22, m32>
Eye:  <m41, m42, m43>

注意:m13表示matrix [0][2]。。。由于矩阵是以线性内存块的形式排列的,所以您可以这样访问它:matrix [x*4+y]

使用投影矩阵:

FOV: 2.0 * tan^-1 (1.0 / m11)

注意:tan^-1在C#中被称为Math.Atan (...)