设置自定义投影矩阵。
如果更改该矩阵,摄像机将不再根据其 fieldOfView 更新渲染。
在调用 ResetProjectionMatrix 之前,该设置持续有效。
仅在您确实需要非标准投影时,才使用自定义投影。
Unity 的水渲染使用该属性设置一个
倾斜投影矩阵。要使用自定义投影,您必须具备良好的
变换和投影矩阵知识。
注意,可以根据平台和其他状态修改
传递给着色器的投影矩阵。如果需要从摄像机投影计算
供着色器使用的投影矩阵,请使用 GL.GetGPUProjectionMatrix。
另请参阅:Camera.nonJitteredProjectionMatrix
// Make camera wobble in a funky way!
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
public Matrix4x4 originalProjection;
Camera cam;
void Start()
{
cam = GetComponent<Camera>();
}
void Update()
{
Matrix4x4 p = originalProjection;
p.m01 += Mathf.Sin(Time.time * 1.2F) * 0.1F;
p.m10 += Mathf.Sin(Time.time * 1.5F) * 0.1F;
cam.projectionMatrix = p;
}
}
// Set an off-center projection, where perspective's vanishing
// point is not necessarily in the center of the screen.
//
// left/right/top/bottom define near plane size, i.e.
// how offset are corners of camera's near plane.
// Tweak the values and you can see camera's frustum change.
using UnityEngine;
using System.Collections;
[ExecuteInEditMode]
public class ExampleClass : MonoBehaviour
{
public float left = -0.2F;
public float right = 0.2F;
public float top = 0.2F;
public float bottom = -0.2F;
void LateUpdate()
{
Camera cam = Camera.main;
Matrix4x4 m = PerspectiveOffCenter(left, right, bottom, top, cam.nearClipPlane, cam.farClipPlane);
cam.projectionMatrix = m;
}
static Matrix4x4 PerspectiveOffCenter(float left, float right, float bottom, float top, float near, float far)
{
float x = 2.0F * near / (right - left);
float y = 2.0F * near / (top - bottom);
float a = (right + left) / (right - left);
float b = (top + bottom) / (top - bottom);
float c = -(far + near) / (far - near);
float d = -(2.0F * far * near) / (far - near);
float e = -1.0F;
Matrix4x4 m = new Matrix4x4();
m[0, 0] = x;
m[0, 1] = 0;
m[0, 2] = a;
m[0, 3] = 0;
m[1, 0] = 0;
m[1, 1] = y;
m[1, 2] = b;
m[1, 3] = 0;
m[2, 0] = 0;
m[2, 1] = 0;
m[2, 2] = c;
m[2, 3] = d;
m[3, 0] = 0;
m[3, 1] = 0;
m[3, 2] = e;
m[3, 3] = 0;
return m;
}
}