我不想用C#代码计算Unity_Matrix_VP。
但是,我总是得到错误的结果。我的代码如下:
Matrix4x4 V = camera1.worldToCameraMatrix;
Matrix4x4 P = camera1.projectionMatrix;
var N = new Matrix4x4();
N.SetRow(0, new Vector4(1.0f, 0.0f, 0.0f, 0.0f));
N.SetRow(1, new Vector4(0.0f, 1.0f, 0.0f, 0.0f));
N.SetRow(2, new Vector4(0.0f, 0.0f, -1.0f, 0.0f));
N.SetRow(3, new Vector4(0f, 0f, 0f, 0f));
Debug.Log("testCamera");
Debug.Log(N);
Debug.Log(P * N * V);
我的代码结果是:
0.97384 -0.02902 0.00304 3.04939
0.05073 1.72168 0.18231 179.67620
0.00624 0.10518 -0.99504 -990.16710
0.00623 0.10512 -0.99444 -989.57320
但是,来自FrameDebugger的Unity_Matrix_VP的值是另一个值:
非常棒。 Unity可以通过另一种方法计算unity_Matrix_VP值吗?
答案 0 :(得分:1)
我知道了:
因为Unity C#使用OpenGL标准,我在Windows上运行Unity。
因此它会将Matrix_PV转换为DirectX。
它可以通过'GL.GetGPUProjectionMatrix'的API修复到跨平台。