MVP变换
视图变换时,让物体和摄像机一起运动,把摄像机放到原点,向上方向为y轴,看向-z轴
在变换时,把e平移到原点,g旋转到-z,t旋转到y,g*t旋转到x
因为正交矩阵的逆矩阵等于转置矩阵,所以只需要把逆矩阵转置就等于原矩阵了。
但其实这里我自己感觉理解起来不是太直白。这里可以使用另一种思路,我们一般是移动摄像机拍摄,此时如果我们把摄像机固定,把摄像机运动的反方向运动给物体也是可以的,举例来说:摄像机绕y轴逆时针旋转30°,其实就相当于物体绕y轴顺时针旋转30°,这里引用知乎中的一篇文章中的图片https://zhuanlan.zhihu.com/p/400791821
摄像机的运动不仅会改变它的位置,也会改变它的角度,所以在摄像机运动后到达一个新的位置时,还需要计算它的角度,这里规定摄像机看的方向为-z方向,那么摄像机的z方向为摄像机的位置向量减去看向点的位置,为了计算y和x方向,引入一个向上向量up为(0,1,0),用up叉乘z会得到一个向量垂直up和z向量构成的平面,这个向量就可以作为x方向,然后此时在使用z叉乘x就可以得到y方向向量,注意叉乘顺序不能相反
举例:摄像机位置为(2,1,1),看向(1,0,0),z=[2,1,2]-[1,0,0]=[1,1,2],x=(0,1,0)叉乘z=[1,0,-1],y=z叉乘x=[-1,2-1]。所以旋转矩阵为
不过此时,摄像机看向的仍然是原点(0,0,0),需要摄像机看向(1,0,0)。所以需要把摄像机平移到合适位置,使得原点平移到center。所以平移矩阵为
所以物体的运动是上面矩阵的逆矩阵,摄像机是先旋转再平移,也就是平移矩阵乘以旋转矩阵,而逆矩阵就是旋转矩阵的逆矩阵乘以平移矩阵的逆矩阵了。
正交投影:把摄像机放到原点,向上方向为y,看向-z,然后忽略z轴,此时的物体就会落在xy平面上,再把物体缩放到[-1,1]2范围内
实际操作时,以一个长方体为例,先把长方体的中心平移到原点,然后对长方体缩放,缩放到[-1,1]3内。
透视投影:把下面的四棱锥挤压成长方体,然后再进行正交投影
透视变换成正交的矩阵推导:
根据相似三角形可算出y'和x'。首先需要把x和y压缩到x'和y'的位置,z的变换未知,假设变换矩阵为M