games101学习笔记02-MVP变换p4
目录
一、MVP变换
模型变换 视图变换 投影变换
二、视图变换
三、投影变换
正交投影 透视投影
正文
一、MVP变换
mvp包括模型变换(model transportation),视图变换(view transportation)和投影变换(projection transportation)。
以现实中拍照为例,模型变换即摆放场景中物体位置,视图变换即摆放摄像机的位置,投影变换即拍照成像。
相机如何定义:相机位置Position、相机朝向Look-at、向上方向up(决定画面是否倾斜)

二、模型变换
将局部坐标转换到世界坐标。
三、视图变换
将世界坐标转换到视图坐标。
当相机场景中所有其他物体相对位置不变时,呈现画面一定不变,因此画面的变换只需要看相对位置的变换。为了方便起见,视图坐标把相机看做是静止的,把相机的位置看做是坐标轴的原点,相机的向上方向为y轴,相机的朝向为-z轴。而其他所有物体在相机的坐标系中移动。

步骤如下:
1.先把相机局部坐标中的中心点e平移到世界坐标的原点。平移矩阵如下:

2.把g旋转到与-z平行
把一个一般的向量旋转到与坐标轴平行比较麻烦,但把坐标轴旋转到与一般的向量平行很简单,因此这一步可以先写出-z轴旋转到g的变换,再求矩阵的逆(转置)。
-z旋转到g的旋转矩阵:

再求转置:

3.把t旋转到与y平行
与2同理。
当相机进行视图变换移动到坐标轴时,场景中的物体也进行相同的视图变换,就可以保证成像依然没有变化。
二、投影变换
将视图坐标转换成裁剪坐标。可以理解为,在物体和相机位置之间设置一个屏,把物体的坐标变换为在屏上的坐标。
分为透视投影perspective projection与正交投影orthographic projection。

1.正交投影
设想把相机拉到无穷远位置,则无论物体的远近,其拍摄的物体的投影大小都与物体本身是一致的。即忽略深度信息,没有近大远小。
对于正交投影,把摄像机看作原点,朝向看作-z轴,向上方向看作y轴。如下图。在这张图中,只是简单地把物体坐标信息中z轴的信息去掉,变成只含x,y的二维坐标,就得到了字母E的正交投影的坐标了。在该图中,E在屏幕后方,点在屏幕前方,但是投影在屏幕上却无法看出前后关系。

为了方便后续工作,在正式的正交变换中,会把一个一般的立方体变成标准立方体。

先把物体中心移动到原点,即每条边挪动中点到坐标轴的距离(下图右边的矩阵)。再进行缩放(左边矩阵)。

2.透视投影
满足近大远小,许多平行关系在投影中不再平行。
透视投影变换如何进行:
先变成正交,再进行正交投影。
(1)把透视投影转换成正交投影
如下图,这个六面体向左侧延伸汇聚的点就是相机中心点。n处表示近处的平面,f处表示远处的平面。其中的实线表示了f平面到n平面的透视关系。
想象将f处平面挤压,变成一个和n处平面大小一致的平面,那么其中的透视线也将变得平行。也就是变成了正交投影。这一步具体来讲,应该是保持近平面不变,远处的平面的前后距离不改变,而围绕中心点进行放缩。


接下来将求出变换矩阵。
侧面图如下。只看特定点(x,y,z),在平面上的投影点为该点挤压后的结果,根据相似三角形得到。同理x'=n/z*x。

则(x',y',z')用齐次坐标表示为(n/z*x,n/z*y,?,1)T,相当于(nx,ny,?,z)T。
也就是说,对(x,y,z,1)T进行透视转正交的变换后(左乘变换矩阵M),得到(nx,ny,?,z)T。则可以计算出这个变换矩阵如下。

(在下文中用M代称)
不妨设四个问号的值为P,Q,A,B。为了解出它们的值,还需加入新的条件。
条件一,在距离n所在的平面上(即近平面)的点,在近平面上投影不变。在近平面上的点,就是把(x,y,z,1)T中的替换成n,也就是(x,y,n,1)T。为方便计算,乘个n转化为(nx,ny,n²,n)T。
数学表示为M·(x,y,n,1)T=(nx,ny,n²,n)T。对于第三项n²的计算,有n²=Px+Qy+An+B。
则结论为P=Q=0,An+B=n²,A、B未知。
条件二,远平面上的中心点的位置不发生改变。
数学表示为M·(0,0,f,1)T=(0,0,f²,f)T。
则结论为Af+B=f²。
根据两个结论,解方程组即可。

(2)进行正交投影变换
