我通过建立空间中的3D点与屏幕上的2D点之间的对应关系(切除)来获得相机矩阵
我的自定义矩阵似乎可以正常工作,但无法像在另一个应用程序上一样将其应用于 Unity主相机。对于Unity,似乎我需要分解矩阵以获得位置,方向和FOV等。
我已经看到很多关于在Unity Main Camera上使用自定义矩阵的主题,但是在所有情况下,它们都有一个与相机模型矩阵分开的投影矩阵。
这是获取自定义矩阵的过程背后的数学运算: https://math.stackexchange.com/questions/3388529/resectioning-problem-and-matrix-decomposition-what-am-i-missing>
在这里,我正在使用一个特定的应用程序(Unity),但是无论如何我都会很高兴了解它背后的数学原理。
我已经在Processing上做了一个草图来测试我的代码,在这里我可以简单地使用自定义矩阵来覆盖默认矩阵,方法是:
pushMatrix();
applyMatrix(customViewProjMatrix);
shape(model3d, 0, 0); //this is what I want to render
popMatrix();
现在,我的矩阵是View和Projection矩阵的乘积,因此我找不到在Unity主摄像机上使用此矩阵的方法,因为看来我需要它们是两个不同的东西。
仍然在Unity中,与上面的代码类似,我可以通过创建一些自定义着色器来创建一些调试行。
GL.PushMatrix();
GL.LoadPixelMatrix ();
GL.MultMatrix (customViewProjMatrix);
GL.Color(Color.yellow);
GL.Begin(GL.LINES);
GL.Vertex3 (-5f, 5f, -5f);
GL.Vertex3 (-5f, -5f, -5f);
GL.End();
GL.PopMatrix();
这仅用于检查我的矩阵,但不影响主相机,这是我的目标。
如果不是我可以在Unity上获得矩阵的方式使用我,那不是,所以任何有关如何使用我的自定义矩阵或创建统一使用矩阵的方法的建议都将受到赞赏。