0

如何将 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

4

1 回答 1

1

ProjectionCamera是一个抽象类,PerspectiveCamera共享OrthographicCamera

如果您想要透视(更远的对象看起来更小),则构造 a PerspectiveCamera,否则构造 a 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)

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

于 2013-08-24T22:26:04.210 回答