Параметры
view | Матрица просмотра (от мира до камеры). |
Описание
Добавьте команду для установки матрицы представления. Матрица просмотра — это матрица, которая трансформируется из мирового пространства в пространство камеры.
При настройке матрицы просмотра и проекции более эффективно использовать SetViewProjectionMatrices.
Примечание. Пространство камеры в Unity соответствует соглашению OpenGL, поэтому отрицательная ось Z направлена камерой вперед. Это отличается от обычного соглашения Unity, где передняя часть камеры является положительной осью Z. Если вы вручную создаете матрицу представления, например, с помощью обратной Matrix4x4.LookAt, вам необходимо масштабировать ее на -1 по оси Z, чтобы получить правильное просмотреть матрицу.
using UnityEngine;
using UnityEngine.Rendering;
// Attach this script to a Camera and pick a mesh to render.
// When you enter Play mode, a command buffer renders a green mesh at
// origin position.
[RequireComponent(typeof(Camera))]
public class ExampleScript : MonoBehaviour
{
public Mesh mesh;
void Start()
{
var material = new Material(Shader.Find("Hidden/Internal-Colored"));
material.SetColor("_Color", Color.green);
var tr = transform;
var camera = GetComponent<Camera>();
// Code below does the same as what camera.worldToCameraMatrix would do. Doing
// it "manually" here to illustrate how a view matrix is constructed.
//
// Matrix that looks from camera's position, along the forward axis.
var lookMatrix = Matrix4x4.LookAt(tr.position, tr.position + tr.forward, tr.up);
// Matrix that mirrors along Z axis, to match the camera space convention.
var scaleMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, new Vector3(1, 1, -1));
// Final view matrix is inverse of the LookAt matrix, and then mirrored along Z.
var viewMatrix = scaleMatrix * lookMatrix.inverse;
var buffer = new CommandBuffer();
buffer.SetViewMatrix(viewMatrix);
buffer.SetProjectionMatrix(camera.projectionMatrix);
buffer.DrawMesh(mesh, Matrix4x4.identity, material);
camera.AddCommandBuffer(CameraEvent.BeforeSkybox, buffer);
}
}
Смотрите так же: SetProjectionMatrix, SetViewProjectionMatrices, Camera.worldToCameraMatrix, Matrix4x4.LookAt.