fov | 垂直视野(以度为单位)。 |
aspect | 宽高比(宽度除以高度)。 |
zNear | 近裁剪平面值。 |
zFar | 远裁剪平面值。 |
Matrix4x4 投影矩阵。
创建透视投影矩阵。
Unity 中的投影矩阵遵循 OpenGL 惯例,即剪裁空间近平面位于 z=-1
,远平面位于 z=1
。
返回的矩阵嵌入了 z 翻转操作,其目的是取消由相机视图矩阵执行的 z 翻转。如果视图矩阵是单位矩阵或不执行 z 翻转的某个自定义矩阵,请考虑将投影矩阵的第三列(即 m02、m12、m22 和 m32)乘以 -1。
请注意,根据所使用的图形 API,着色器中的投影矩阵可能遵循不同的惯例,例如,D3D 样式的剪裁空间的近平面为零,远平面为一;反向 Z 投影的近平面为一,远平面为零。若要计算适合传递给着色器变量的投影矩阵值,请使用 GL.GetGPUProjectionMatrix。
using UnityEngine;
public class ExampleScript : MonoBehaviour { void Start() { // create projection matrix: 60 FOV, square aspect, // near plane 1, far plane 100 var matrix = Matrix4x4.Perspective(60, 1, 1, 100); // will print: // 0.20000 0.00000 0.00000 0.00000 // 0.00000 0.20000 0.00000 0.00000 // 0.00000 0.00000 -0.02020 -1.02020 // 0.00000 0.00000 0.00000 1.00000 Debug.Log("projection matrix\n" + matrix);
// get shader-compatible projection matrix value var shaderMatrix = GL.GetGPUProjectionMatrix(matrix, false); // on a Direct3D-like graphics API, will print: // 0.20000 0.00000 0.00000 0.00000 // 0.00000 0.20000 0.00000 0.00000 // 0.00000 0.00000 0.01010 1.01010 // 0.00000 0.00000 0.00000 1.00000 Debug.Log("shader projection matrix\n" + shaderMatrix); } }