我正在尝试学习 Unity3D 相机背后使用的主要概念,特别是它的矩阵,并且有一些疑问,据我所知,Unity 文档中没有给出答案:
1) Unity相机是基于OpenGL相机的吗?比如相机上的OpenGL教程可以找到here在Unity中应用?如果是,那么当表示 ModelViewProjection 矩阵时,在 Unity 中我们有:
MVPmatrix = mainCamera.projectionMatrix * mainCamera.worldToCameraMatrix;
其中MVP是一个4x4的矩阵,而在OpenGL中通过以下代码表示:
MVPmatrix = projection * view * model;
为什么这两种方法有差异?
3) 当将前面提到的 MVPmatrix 与给定的 Vector3[4] 类型相乘时,我们是否要转换为齐次坐标?
2) 如果 1) 的答案是“否”,我在哪里可以获得有关 Unity3D 相机矩阵的更多信息?
最佳答案
OpenGL
现代 OpenGL 中不存在相机这样的东西。顶点变换是使用顶点着色器完成的。其中可以使用任意数量的矩阵。您甚至可以在一个应用程序中使用不同的着色器,这些着色器需要不同的矩阵集。
在特定的教程中使用了 3 个矩阵:模型、 View 和投影。这是许多 3D 应用程序中使用的非常常见的方法。您可以将其视为常见的 3D 图形编程模式。
Unity3D
幸运的是,Unity3D 遵循以下模式:
- 模型矩阵。在脚本中:Transform.localToWorldMatrix 。在顶点着色器中:_Object2World。
- 查看矩阵。在脚本中:Camera.worldToCameraMatrix 。在顶点着色器中:UNITY_MATRIX_V。
- 投影矩阵。在脚本中:Camera.projectionMatrix 。在顶点着色器中:UNITY_MATRIX_P。
您可以阅读着色器中可用的其他变量 here .
关于matrix - Unity3D 相机矩阵的高级信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24165915/