版本: Unity 6 (6000.0)
语言英语
  • C#

CommandBuffer.SetViewProjectionMatrices

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交的内容,但我们确实会阅读用户提出的每个建议的更改,并在适用的情况下进行更新。

关闭

提交失败

由于某种原因,您的建议更改无法提交。请<a>稍后再试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

声明

public void SetViewProjectionMatrices(Matrix4x4 view, Matrix4x4 proj);

参数

view 视图(世界到相机空间)矩阵。
proj 投影(相机到裁剪空间)矩阵。

描述

添加一个命令来设置视图和投影矩阵。

此函数等同于调用 SetViewMatrixSetProjectionMatrix。当同时更改两个矩阵时,效率略高。

此函数与内置渲染管线兼容。它与通用渲染管线 (URP)、高清渲染管线 (HDRP) 或自定义可脚本化渲染管线不兼容。

注意:Unity 中的相机空间与 OpenGL 约定匹配,因此负 z 轴是相机的向前方向。这与通常的 Unity 约定不同,在通常的 Unity 约定中,相机的向前方向是正 z 轴。如果您正在手动创建视图矩阵,例如使用 Matrix4x4.LookAt 的逆矩阵,则需要沿 z 轴将其缩放 -1 以获得正确的视图矩阵。

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); } }