Объявление
public static Matrix4x4 Ortho(float left, float right, float bottom, float top, float zNear, float zFar);Параметры
left | Левая координата x. |
right | Правая координата x. |
bottom | Нижняя координата Y. |
top | Верхняя координата Y. |
zNear | Значение плоскости отсечения вблизи глубины. |
zFar | Значение плоскости отсечения дальней глубины. |
Возвращает
Matrix4x4 Матрица проекции.
Описание
Создайте матрицу ортогональной проекции.
Возвращенная матрица при использовании в качестве проекционной матрицы камеры создает проекцию
область между слева
, справа
, сверху
и bottom
, с zNear
и zFar
в качестве плоскостей отсечения ближней и дальней глубины в куб, идущий от (слева, снизу, рядом) = (-1, -1, -1) до (справа, сверху, далеко) = (1, 1, 1).
Возвращенная матрица включает операцию z-flip, целью которой является отмена z-flip, выполняемого матрицей обзора камеры. Если матрица представления является тождественной или какой-либо пользовательской матрицей, которая не выполняет z-разворот, рассмотрите возможность умножения третьего столбец матрицы проекции (т. е. m02, m12, m22 и m32) на -1.
Матрицы проекций в Unity следуют соглашению OpenGL, т. е. пространство отсечения рядом с плоскостью находится в z=-1
, а дальняя плоскость находится в z=1
.
Обратите внимание, что в зависимости от используемого графического API матрицы проекций в шейдерах могут следовать различным соглашениям, например пространство клипа в стиле D3D имеет ближнюю плоскость на нуле и дальнюю плоскость на единицу; а проекция «перевернутая Z» имеет ближнюю плоскость в единице и дальнюю плоскость в нуле. Чтобы вычислить значение матрицы проекции, подходящее для передачи в переменные шейдера, используйте GL.GetGPUProjectionMatrix.
using UnityEngine;
public class ExampleScript : MonoBehaviour
{
void Start()
{
// create orthographic matrix
var matrix = Matrix4x4.Ortho(-4, 4, -2, 2, 1, 100);
// will print:
// 0.25000 0.00000 0.00000 0.00000
// 0.00000 0.50000 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.25000 0.00000 0.00000 0.00000
// 0.00000 0.50000 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);
}
}
Смотрите так же: Perspective, Camera.projectionMatrix, GL.LoadPixelMatrix, GL.LoadProjectionMatrix, GL.GetGPUProjectionMatrix.