齐次坐标变换+Unity矩阵变换
矩阵变换
变换(transform):指的是我们把一些数据,如点,方向向量甚至是颜色,通过某种方式(矩阵运算),进行转换的过程。
变换类型
线性变换:保留矢量加和标量乘的计算
f(x)+f(y)=f(x+y)
kf(x)=f(kx)
包含:旋转,缩放,镜像,投影
可以使用3x3矩阵,表示
非线性变换
包含:平移
可以使用4x4矩阵,表示
仿射变换:仿射变换就是合并线性变换与平移变换的变换类型,仿射变换可以
使用一个4x4的矩阵表示,所以需要将矢量扩展到四维空间下,这就是齐次坐标
空间,变换矩阵称为齐次矩阵
齐次坐标:
点的列矩阵w分量:补1,因为点受到平移变化的影响
方向矢量列矩阵的w分量:补0,因为平移不会影响到方向向量的方向
齐次矩阵构成
:表示线性变换矩阵
:表示平移变换矩阵
平移矩阵
( x,y,z分别代表x平移量,y平移量,z平移量)
缩放矩阵(缩放是线性变换,所以可以用表示这个变换的过程)
旋转矩阵
绕X轴,旋转角度
绕Y轴,旋转角度
绕Z轴,旋转角度
复合变换
一个点P(1,1,1),需要做绕z轴旋转30度,平移(5,4,2),
缩放(3,2,1)复合变换,是存在顺序的,因为矩阵乘运算,不满足乘法交换律
x
x
x
=
复合变换的顺序,决定了变换矩阵相乘的顺序,根据需求
x
x
x P
因为矩阵满足结合律,所以可以得出变换矩阵为( x
x
)
最后的结果是:( x
x
)x P
坐标空间
模型空间:模型内部点的位置都存储在模型文件内,所以点都是相对于模型空间的
世界空间:模型在游戏运行时,需要加载到场景中,所以点存储在世界空间中
观察(摄像机)空间:物体是否被投射到屏幕中,是由相机控制的,相机相对于物体
的位置,决定了显示效果。
裁剪空间:需要判定点,是否存在于摄像机裁剪视锥体下,如果存在于视锥体内,则
点可以进行显示。
屏幕空间:最终显示的设备为显示器,所以需要将点投影到显示器上,算出屏幕坐标
点,由显示器显示
Unity着色器中常见矩阵
UNITY_MATRIX_MVP:将点从模型空间下,转换到裁剪空间下
UNITY_MATRIX_M:将点从模型空间下,转换到世界空间下
UNITY_MATRIX_V:将点从世界空间下,转换到观察空间下
UNITY_MATRIX_P:将点从观察空间下,转换到裁剪空间下
UNITY_MATRIX_MV:将点从模型空间下,转换到观察空间下
UNITY_MATRIX_VP:将点从世界空间下,转换到裁剪空间下
_Object2World:将点从模型到世界空间转换(互为逆矩阵)
_World2Object:将点从世界空间到模型转换(互为逆矩阵)
该系列专栏为网课课程笔记,仅用于学习参考。