Unity常用内置变换矩阵

Unity引擎提供了一系列内置的变换矩阵,这些矩阵在着色器中用于处理物体、摄像机和光照的坐标变换,是游戏开发中不可或缺的工具。它们帮助开发者在顶点着色器和片段着色器中实现坐标转换、光照计算等功能。


主要变换矩阵类型

模型矩阵 (Model Matrix)

// 在着色器中访问
unity_ObjectToWorld  // float4x4
UNITY_MATRIX_M // 宏定义

作用:将顶点从模型空间转换到世界空间(World Space)。

用法:将物体的局部坐标转换为世界坐标,便于在世界空间中进行计算。

组成部分

  • 前3×3部分包含旋转和缩放
  • 第4列包含位移信息
  • 第4行通常为(0,0,0,1)

代码示例

// 顶点着色器中的应用
float4 worldPos = mul(unity_ObjectToWorld, float4(vertexPosition, 1.0));
// 或
float4 worldPos = mul(UNITY_MATRIX_M, float4(vertexPosition, 1.0));

应用场景:适用于需要世界坐标的场景,例如光照计算、物理模拟或与其他物体交互。

视图矩阵 (View Matrix)

// 在着色器中访问
unity_MatrixV  // float4x4
UNITY_MATRIX_V // 宏定义

作用:将顶点从世界坐标空间转换到相机的视图空间。

用法:将世界坐标转换到摄像机坐标系。

实际形式:

[ Rx Ry Rz -dot(R, Eye) ]
[ Ux Uy Uz -dot(U, Eye) ]
[ Fx Fy Fz -dot(F, Eye) ]
[ 0  0  0        1      ]

其中R、U、F分别是相机的右、上、前方向向量,Eye是相机位置。

访问相机位置:

float3 cameraPos = _WorldSpaceCameraPos;
// 或
float3 cameraPos = UNITY_MATRIX_V[3].xyz;

代码示例

float4 viewPos = mul(UNITY_MATRIX_V, worldPos);

应用场景:用于需要摄像机视角坐标的场景,如计算摄像机空间的光照或实现自定义摄像机效果。

投影矩阵

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值