GAMES101-4:视图和投影变换
前言
GAMES101-P4:视图变换和投影变换(正交投影、透视投影)。透视投影部分内容在原视频P5
如何拍一张照片:MVP变换
Model Transformation:摆好位置
View Transformation:找好拍照角度
Projection Transformation:拍照。
视图变换:View
思考:任何情况下进行拍照,照片都只和物体相对于相机的坐标有关。
所以建立一个新的坐标系(相机坐标系)规定
- 相机处于原点;
- 相机的向上方向是 Y (up at Y);
- 相机看向 -Z 方向。
将坐标转换:
- 平移相机至原点
- 旋转使向上方向为 Y,旋转使相机看向的方向为 -Z。
求此处旋转矩阵,可以求坐标轴旋转为相机轴的旋转矩阵,然后转置。
投影变换:Projection
两种投影方式:
- Orthographic Projection:正交投影
- Perspective Projection:透视投影
透视投影更接近人眼成像,会有“近大远小”、“平行线相交于一点”等效果。
在如下图所示的模型中,透视事实上就是拍下了锥形视野内的 [n,f] 内的一段区间内的物体,正交则是相机处于无限远处的一个特例。
正交投影
- 构建相机坐标系
- 构建一个包含所有物体的空间立方体,描述它为 的一个立方体(左右下上远近)。是由远及近是由于右手坐标系且看向 -Z 方向导致远处 Z 坐标更小。
- 将结果规范化在一个 的方块内
矩阵形式:中心移至原点,再缩放
透视投影
对如上图的透视,定义近平面 n 和远平面 f,有:
- 近平面保持不变,其余地方进行“挤压”使得其与近平面一样大。使上图左侧变成右侧形状。
- 进行正交投影
透视投影的变换矩阵
这里有一个需要注意的地方是,挤压以后,坐标的 Z 轴值“可能”会发生变化。对此我们规定:
- n 平面上的坐标不变
- f 平面上的坐标 Z 轴不变,且平面中点坐标不变
对于任意的点 ,对应到一个 n 平面上的点 。相似三角形有
\begin{align} y' =\frac{n}{z}y\\ x'=\frac{n}{z}x \end{align}
接下来求解 Z 轴的变换方程,即矩阵的第三行。
假设变换矩阵为 M,有:
其中 未知。
的值的变换向量是 M 矩阵中的第三行,所以可以只关心第三行。又因为 Z 坐标值显然和 XY 没有关系,所以此行可以写为 其中 A、B 未知。
n 平面上的点满足变换矩阵且 Z 坐标不变。所以 n 平面上的坐标可以写成 。同时乘以坐标 n,代表的点依然不变:。
所以有
f 平面同样中点 满足变换矩阵且 Z 坐标不变。于是
于是可以联解
\begin{align} An+B =n^2\\ Af+B =f^2 \end{align}
得
\begin{align} A = n+f\\ B = -nf \end{align}
所以解出 Z 轴变换方程值, M 矩阵
近平面的表示方法:可视角度
我们通常认定近、远平面的深度(z轴)是已知的,所以现在的问题是如何描述近平面:
-
指定近平面四个点的坐标
-
指定宽高比和可视角度。下图为 y 轴可视角度的表示,根据 y 轴可视角度和宽高比可以求出 x 轴的可视角度
两种表示是可以互相转换的,如下:
其中近平面的范围为,aspect 为宽高比。
跳转
Home:GAMES101-1:课程总览与笔记导航
Prev:GAMES101-3:变换
Next:GAMES101-5:(三角形的)光栅化