上节课内容补充:
旋转theta角和-theta角可以证明旋转矩阵的逆矩阵等于它的转置矩阵,这种矩阵称为正交矩阵。
1 3D Transformations
三维缩放、平移矩阵:
三维旋转矩阵:
任意一个三维的旋转都可以拆解成绕X、Y、Z三个轴旋转的组合:
2 Viewing(观测) Transformation
观测变换,在国内一般分为两步:View(视图) Transformation + Projection(投影) Transformation.
用拍照比喻一下MVP变换的过程:
2.1 View/Camera Transformation 视图变换
考虑观测变换之前首先考虑一下相机,由于两个物体运动完全相同那它们其实可以作是相对静止的,而为了方便运算,所以在做观测变换实际上就是把相机从某个点移动到原点再把相机的转向转到对应XYZ轴上:
只要把相机变换的这个过程求出来,那物体也做同样的变化,实际上就完成了MVP变化中的V,View变换。而表示这个变换的矩阵,也就是View矩阵。
2.2 Projection Transformation 投影变换
2.2.1 Orthographic Projection 正交投影
简单理解正交投影:
正交投影矩阵:
2.2.2 Perspective Projection 透视投影
透视投影特质:近大远小
说透视投影之前先回忆数学基础:
上图是说,齐次坐标的(x,y,z,1)和(kx,ky,kz,k,k!=0)其实表示的都是同一个点(x,y,z,1)。因为齐次坐标表示一个点时,第四个数字k必须为1,如果不为1,则要将4个数字同时除以k,最终得出结果就是(x,y,z,1)。同理,(xz,yz,z*z,z!=0)也是表示(x,y,z,1)。
那怎么做透视投影呢,其实可以将它转化成两步:
1.首先将远平面挤成跟近平面一样大
2.再做正交投影
而正交投影的过程我们已经知道了,接下来就是求透视变成正交的这个挤压的过程。下图是一个侧视图,对于近平面上的一个点,与近平面和远平面之间任意一个平面上的点,由相似三角形可以有以下关系:x` = n/z * x ,y
` = n/z * y。
也就是说,经过透视投影到正交投影的这个挤压过程,可以得出下面式子:
再配合上面回忆的数学基础,又可以得到以下式子:
现在这个变换后的结果中,4个数字有三个数字都是已经知道的,那这个透视到正交投影的变换矩阵可以写成下面这个样子:
那么现在只要将矩阵的第三行填完,这个过程的矩阵就求出来了,那再加上已知的正交投影,整个透视投影的过程就完事了。
通过观察可以得出两个性质:
1.任何一个在近平面的点都不会变化
2.任何一个远平面点的Z值都不会变化
由第一个性质可以得知:
也就是说矩阵乘以(x,y,n,1) = (nx,ny,n*n,n),想要得出第三个数等于n*n,那么矩阵的第三行前两个数字一定是0:
由第二个性质可以得知:
(取远平面的中心点)
这样得出两个式子两个变量,可以求解方程:
最终,透视投影到正交投影过程的矩阵就解完了,结果为:
透视投影的矩阵:
最后留了个问题:
对于任意一个点位于(n+f)/2 ,挤压后,这个点会被推向远平面还是近平面?
内容补充:
如何定义一个视锥:
1.宽高比
2.垂直可视角度
如果知道了fovY(垂直可视角度)和aspect(宽高比),可以转化为视锥体截平面的left,right,bottom,top。
作业1:
编译结果: