Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

CommandBuffer.SetViewProjectionMatrices

Объявление

public void SetViewProjectionMatrices(Matrix4x4 view, Matrix4x4 proj);

Параметры

view Матрица просмотра (от мира до камеры).
proj Матрица проекции (камера на пространство клипа).

Описание

Добавьте команду для установки матрицы вида и проекции.

Эта функция эквивалентна вызову SetViewMatrix и SetProjectionMatrix. Несколько эффективнее одновременное изменение обеих матриц.

Эта функция совместима со встроенным конвейером рендеринга. Он несовместим с универсальным конвейером рендеринга (URP), конвейером рендеринга высокого разрешения (HDRP) или пользовательскими конвейерами рендеринга с поддержкой сценариев.

Примечание. Пространство камеры в 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 entering Play mode, this will render a green mesh at // origin position, via a command buffer. [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.SetViewProjectionMatrices(viewMatrix, camera.projectionMatrix); buffer.DrawMesh(mesh, Matrix4x4.identity, material); camera.AddCommandBuffer(CameraEvent.BeforeSkybox, buffer); } }

Смотрите так же: SetViewMatrix, SetProjectionMatrix, Camera.projectionMatrix, Matrix4x4.LookAt, Matrix4x4.Perspective.

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
API скрипты 2021.3