Unity 6.3
0 онлайн 89 гостей 3 в системе
Вход

CommandBuffer.SetViewMatrix

Declaration

public void SetViewMatrix(Matrix4x4 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,.