图形学入门:坐标变换

在几何阶段,我们不妨想象这样一个过程:我们在真实世界中,是如何拍照的呢?
1,寻找拍摄对象(模型变换)
2,摆放相机(相机变换)
3,调节相机参数(投影变换)
4,拍照(视口变换)->光栅化(下一阶段)
图形学入门:坐标变换
首先看一下坐标变换的原理:
蓝色坐标系在红色坐标系中的表示:
首先由于蓝色坐标系跟红色坐标系的坐标方向是相反的,所以在矩阵中,单位向量的值为负值。
图形学入门:坐标变换
模型变换
将本地坐标变换为世界坐标:比如我想要将一个模型导入UE4,这个模型本身是有形状的,它各个顶点的相对位置都是固定的,所以有一个本地的坐标。而我要将这个模型导入世界,它在世界中就要有自己的坐标,这个过程就是模型变换。
这个过程里,矩阵是四维的。(三维的单位向量+一个相对坐标值)

图形学入门:坐标变换
具体的变换过程如图:要得到本地模型在世界中的坐标,首先要有一个模型变换矩阵,这个矩阵就是M。
M相对世界的偏移是(0,0,-5),那么模型变换矩阵就是一个单位矩阵+偏移量。本地坐标P是(0,3,0),而其
向量对应就是(0,3,0,1),1代表它是一个点。世界坐标就是MP。

相机变换
比如相机坐标的偏移是(0,0,5),那么相机坐标系就是单位矩阵+偏移量。那么相机坐标是否就是Mview*Mmode呢?
图形学入门:坐标变换
答案是错;
要得到相机坐标下的位置,首先要把相机坐标系移动到世界坐标系中,即相机坐标系的逆变换。
图形学入门:坐标变换
所以相机坐标系就如上图所示

正交投影变换
图形学入门:坐标变换

正交投影:设置相机时会设置一个视锥体,那么从相机的位置看来,其他的坐标就已经固定好了。
图形学入门:坐标变换
步骤如下:
1,移动视锥体到相机坐标的中心。
2,归一化,将边的大小缩放到-1到1之间。
3,Z的方向要反向,z本来是默认指向屏幕外的方向,但这并不是相机拍摄的方向。

1,位移矩阵
图形学入门:坐标变换
图形学入门:坐标变换
最后就是,相机会从视锥体的中心向外看。

2,缩放矩阵
图形学入门:坐标变换
图形学入门:坐标变换
3,Z反向矩阵
只把Z轴的单位向量取反即可
图形学入门:坐标变换

最后,矩阵运算
图形学入门:坐标变换
这里注意,最先运算的放在最右边,最晚运算的放在最左边,这是矩阵乘法的性质。因为矩阵乘法对顺序敏感。

最后合成的正交变换投影矩阵就是这个。
图形学入门:坐标变换
所需参数:6个。即*面和远平面的两个点,是一个对角线。Xmax,Ymax,Zmaxa,Xmin,Ymin,Zmin。将这两个点的值代入,即可得到矩阵。

透视投影
符合近大远小原理的投影
图形学入门:坐标变换
图形学入门:坐标变换
上图的左图就是原始图的俯视图,右图是从x轴负方向看过去的图。可以看出Znear/Z=Xp/X;
图形学入门:坐标变换
Z值为了符合习惯,要乘以-1取反方向,上下同乘以一个z,再经过变化,可以得到右侧的矩阵。
然后对应平面上的所有点乘以这个矩阵,就会得到投射的对应点。

视口变换
将(-1,1)范围转换到屏幕坐标,深度值从(-1,1)转换到(0,1),缩放2倍
1,缩放
2,移动
合成到一起之后就变成了了下图的公式;(左侧移动,右侧缩放):
移动:(Xmin+Xmax)/2,(Ymax+Ymin)/2,1/2;
缩放:(Xmax-Xmin)/2,(Ymax-Ymin)/2,1/2;
图形学入门:坐标变换