图形 1.2.3 MVP矩阵运算

图形 1.2.3 MVP矩阵运算

什么是MVP矩阵


局部空间也可以称为模型空间。

M矩阵(Model)

将顶点坐标从模型空间转到世界空间。

从模型空间变换到世界空间:第一步进行缩放,第二步进行旋转,第三步进行*移,依次进行矩阵变换得出变换矩阵。

最先进行的变换的矩阵在右边。

在Maya中,坐标系为右手坐标系,由x叉乘y得到z。(红色x轴、绿色y轴、蓝色z轴)

在Unity中是左手坐标系,由y叉乘x得到z。

V矩阵(View)

将顶点坐标从世界空间转到视觉空间。

以摄像机为空间原点的坐标系就叫视觉空间坐标系。

摄像机由位置、朝向和向上的方向三个属性构成,unity中摄像机朝向z轴的负方向。

从世界空间变换到视觉空间:*移整个观察空间,将摄像机原点和世界坐标原点重合,坐标轴重合,摄像机在世界空间中先是旋转(摄像机向上的方向旋转到与y轴重合,摄像机朝向旋转到与z轴负方向重合),再*移,为了让摄像机与世界坐标重合,要进行逆变换。第一步进行*移,第二步进行旋转,第三步z分量取反(因为是左手坐标系)。

采用逆变换是因为将摄像机朝向或者摄像机向上方向变换到世界坐标系的(0,1,0)或(0,0,-1)比较困难,所以采用逆变换,将(0,1,0)变换到(x,y,z),并且旋转矩阵有一个特殊性质,旋转矩阵的逆矩阵=转置矩阵,因此还剩去了计算逆矩阵的过程。

P矩阵(Projection)

将顶点坐标从视觉空间转到裁剪空间。

透视投影和正交投影

透视投影是*大远小,正交投影是物体的实际大小。

同一个场景,在透视投影下:

远处的方块更小。在正交投影下:

两个方块一样大。

透视投影变换如下:

Near是摄像机*裁*面,Far是摄像机远裁*面,FOV是摄像机可视范围,nearClipPlaneHeight和farClipPlaneHeight是用三角函数求*裁*面和远裁*面的高度。

正交投影变换如下:

2倍Size就是*裁*面和远裁*面的高度。

如果顶点在视锥体内,那么透视投影和正交投影变换之后,其坐标必须满足x,y,z都在[-w,w]之间。

世界空间的应用

o.worldPos=mul(unity_ObjectToWorld,v.vertex).xyz;//将坐标从模型空间转到世界空间
o.worldNormal=mul(v.normal,(float3x3)unity_WorldToObject);//获得世界空间法线
o.vertex=UnityObjectToClipPos(v.vertex);//将顶点从模型空间转到裁剪空间
o.uv=TRANSFORM_TEX(o.worldPos.zx,_MainTex);//_MainTex保存UV贴图,该函数以世界空间坐标的zx分量作为uv进行采样

视觉空间的应用

OUT.viewPos=UnityObjectToViewPos(IN.vertex);//将顶点坐标从模型空间转到视觉空间
float FadeAlpha=1-saturate(-IN.viewPos.-_DisappearDis)/_GradientDis);//saturate(x)将x规范化到[0,1]之间,如果x小于0则返回0,如果x大于1则返回1,如果x属于[0,1]则返回x的值,

补充:光栅化过程

视频讲解:
https://www.zhihu.com/zvideo/1347581841478709248

posted @ 2023-02-22 12:01  HD0117  阅读(155)  评论(0编辑  收藏  举报