c# - 是否可以分解通过切除获得的相机矩阵?
问题描述
我通过建立空间中的 3D 点与屏幕上的 2D 点之间的对应关系获得了相机矩阵(切除)
我的自定义矩阵似乎正在工作,但我无法像在另一个应用程序上那样将此矩阵应用到Unity 主摄像头。对于 Unity,似乎我需要分解我的矩阵以获得位置、方向和 FOV 等。
我已经看到很多关于在 Unity 主相机上使用自定义矩阵的主题,但在所有情况下,它们都有一个与相机模型矩阵分离的投影矩阵。
这是我获取自定义矩阵的过程背后的数学: https ://math.stackexchange.com/questions/3388529/resectioning-problem-and-matrix-decomposition-what-am-i-missing >
在这里,我使用了一个特定的应用程序(Unity),但无论如何我都会很高兴了解它背后的数学原理。
我在处理上制作了一个草图来测试我的代码,我可以简单地使用我的自定义矩阵通过以下方式覆盖默认矩阵:
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 上获得它的方式那样使用我的矩阵,我不是,所以任何关于如何使用我的自定义矩阵或创建它以在 Unity 上使用的其他方法的任何建议都将不胜感激。
解决方案
推荐阅读
- elasticsearch - elasticsearch 7.x 中的特定小时范围查询
- python - 如何使用 ABAQUS python 脚本(不消耗许可证)提取特定节点/节点集上所有步骤的载荷和位移数据?
- swift - 为什么 UITabBar 在 iOS 13 中工作异常?
- python - 简单的 pybind11 模块失败,没有命名模块
- google-app-engine - 从 App Engine 到 Cloud SQL 的流量是通过互联网还是通过 Google 内部网络传输的?
- python - c++ vector.push_back 比 python list.append 慢
- sharepoint-online - SPFX 包总是从本地主机而不是 CDN 引用内容或资源
- laravel - 如何在 laravel 控制器中使用 isset 条件
- typescript - 如何防止派生类属性遮蔽基类属性
- keras - 如何在 kerase>2.0 中使用 Merge?