目录
1. 观测变换(Viewing transformation)
1.1 视图变换(View/Camera transformation)
1.2 投影变换(Projection transformation)
1.2.1 正交投影(Orthographic projection)
1.2.2 透视投影(Perspective projection)
1. 观测变换(Viewing transformation)
1.1 视图变换(View/Camera transformation)
1.1.1视图变换是什么?
让我们思考拍摄一张照片的过程:
1.找好地点,需要拍照的人站好,摆好姿势。(模型变换Model transformation)
2.放好相机,并找好相机的角度(视图变换 View transformation)
3.茄子!拍好照片。(投影变换Projection transformation)
1.1.2 如何进行视图变换?
(1)首先定义相机
1.放置在哪里?e向量
2.看向哪里? g向量
3.相机自身关于视线轴的旋转程度? t向量
这三个向量便可以确定相机了。
如果相机和物体的运动一致,那么拍到的图像就是一成不变的,我们不希望看到这样的结果。
我们约定:
将相机放在(0,0,0)处
相机永远面向-Z轴
永远以Y轴为向上方向。
其他的物体参照相机的位置来运动。
(2)如何使用矩阵变换将相机移动到上述约定位置?
将e向量移到坐标原点
旋转g向量使之与-Z轴重合
旋转t向量使之与Y轴重合
自然g叉乘t的结果向量也与X轴重合了
(3)如何书写这个变换矩阵呢?
整个变换过程:先平移,再进行复合的旋转。
平移矩阵T比较容易得出,只要将e移到原点即可,也就是矩阵的平移部分填写e点坐标的相反数-xe、-ye、-ze。
旋转矩阵R的推导可以使用逆向思维。任意轴旋转至标准轴的矩阵不好书写,但从标准轴旋转至特定轴(逆操作)的矩阵较好写出R-1,写出之后再对其求逆矩阵,便可以得到想要的结果。而旋转矩阵是正交矩阵,它的逆就是它的转置。
1.1.3模型|视图变换
因为模型变换和视图变换本质上都是把物体放到特定的位置上,所以人们往往将他们统称为模型|视图变换。
1.2 投影变换(Projection transformation)
正交投影不会带来近大远小的现象,它默认相机离物体无限远。
透视投影会带来近大远小的现象,平行线的延长线会在空间中某一点相交。
人眼成像更类似于透视投影。
1.2.1 正交投影(Orthographic projection)
(1)正交投影的一种简单的理解
·将相机以我们约定好的方式(置于原点,面向-Z轴,头指Y轴)放好
·舍弃物体的Z坐标
·将物体的大小缩放为围绕坐标原点的[-1,1]2的小矩形(约定俗成)
经过这三步就完成了正交投影。
(2)正交投影的通常实现
·在空间中定义一个宽度[l,r]、高度[b,t]、深度[f,n]的长方体
·平移这个长方体,使它的体心与坐标原点重合
·将其缩放成[-1,1]3的标准正方体
这个变换矩阵书写格式如下:
PS:这样变换之后,物体确实会被拉伸,这部分变形会在后面视口变换中讲到。
1.2.2 透视投影(Perspective projection)
透视投影应用的非常广泛
近大远小
平行线在视觉上不再平行
(1)透视投影的数学基础
将齐次坐标(x,y,z,1)的各部分乘以同一个非零数,其结果与(x,y,z,1)本身都表达三维空间中的同一个点(x,y,z)。
(2)如何进行透视投影
·先将透视投影形成的梯台(截头锥体)挤压成一个长方体
·再对这个挤压后的长方体进行正交投影
(3)对梯台进行挤压的几点前置规定
·规定近平面的任何一点都不会改变
·规定远平面的深度(Z坐标)不会发生改变,只是向里收缩。
·远平面的中心点不变
(4)如何对梯台进行挤压?
1.画出侧视图,观察图中的相似三角形,得到表达式
2.同理,可得表达式
3.将这两个表达式代入变换矩阵的结果中,可以确定矩阵的1、2、4这三行参数。
4.使用两个已知条件:近平面任何点变换前后不发生改变;
远平面中心变换前后不发生改变。
即可推出剩下的一行未知数。
至此,透视变换的挤压矩阵所有参数已知。
透视变换的挤压矩阵:
1.3 补充(垂直可视角度fovY与长宽比)
定义空间观察范围(视锥)的常用方式
人们常通过下面两个数据描述一个观察范围
·垂直可视角度 vertical field-of-view (fovY)
·长宽比 aspect ratio
已知垂直方向可视角度fovY后,可以根据其正弦值与距离n求出可视范围的一半的高度t,再根据已知的长宽比,便可以算出可视范围的宽度。