1.MVP变换
将虚拟场景中的模型投影到屏幕上,也就是二维平面上,需要分三个变换。
1.首先需要知道模型的位置,也就是前面提到的基本变换,像缩放、平移,旋转,也称为模型(Model)变换。
2.然后需要知道从哪里看,需要调整相机的位置和方向,也就是视图(View)变换,也称为相机(Camera)变换。
3.最后需要将三维图形投影到二维平面上,就是投影(Projection)变换。
上述三个总称为MVP变换。MVP变换与拍照可以直观类比如下:
摆Pose-模型变换
调整相机-视图变换
拍照-投影变换
2.视图变换
上述已经说明了什么是视图变换。
2.1如何执行视图变换
视图变换也就是相机变换,需要先确定一个相机。确定相机需要三个因素:
1.位置,指相机摆放的位置,记作e。
2.视线方向,指相机往哪看,记作g。
3.上方向,用来保证相机无法绕z轴旋转,记作t。
2.2观察的关键
如果物体与相机一起移动,得到的“照片”将是相同的。也就是说相机和所有东西都一起移动的时候,得到的结果是一样的。所以得出一个结论,就是可以永远将相机固定在一个位置上,所有移动都是其他物体在移动,并且相机放在原点,相机方向是-Z方向,上方向是Y轴。这样称为相机的标准位置。如图:
这样设置相机是为了简化操作。
2.3视图变换矩阵推导
将任意位置的相机变换到上面说的标准位置上,如图所示:
可分成以下三步步:
1.从 e 位置平移到坐标原点
2.视线方向从 g 旋转到-Z
3.上方向从 t 旋转到Y,这时g × t 也自动与X重合了
将上述操作如何用矩阵表示,首先确定相机先平移再旋转,前面讲过矩阵是从右向走应用的,所以先写出如下:
1.相机从 e 位置平移到坐标原点的平移矩阵如下:
2.视线方向 g 旋转到-Z,上方向 t 旋转到Y,g × t 旋转到X。这样不好写,因为把任意个轴旋转到规范化的轴,比如-Z(0,0,-1)。同理 t 旋转到Y也不好写。但是反过来好写,把X(1,0,0)旋转到g × t ,Y(0,1,0)旋转到 t ,Z(0,0,1)旋转到 -g ,这就是之前学过的逆变换,也就是逆矩阵。视图旋转矩阵的逆矩阵如下:
前面讲过旋转矩阵是正交矩阵,所以旋转矩阵的逆矩阵就是它的转置矩阵,那么只要把逆矩阵转置即可得到想要的视图旋转矩阵:
将平移矩阵与旋转矩阵带入可得视图变换矩阵: