# 几何变换(四)
# 8. 视图变换管线概览
一个物体从独立的物体最终转换为2D图像,期间经过如下坐标变换
- Modeling transformation: 由局部坐标系(Local Space)转换为世界坐标系(World Space)
- Viewing transformation: 由世界坐标系(World Space)转换为摄像机坐标系(View Space)
- Projection transformation: 由摄像机坐标系(View Space)转换为标准设备坐标系NDC(Normalized Device Coordinate)
- Viewport transformation: 由NDC坐标系转换为视口坐标系(Screen coordinate System)
# 9. 摄像机视图变换(Viewing/Camera Transformation)
# 9.1 定义
视图变换是将物体的世界坐标系转换到摄像机的坐标系
摄像机坐标系以观察点(eye)为原点,向前方向为-z轴,x轴指向右侧(右手坐标系)
所以
# 9.2 计算
根据坐标系变换公式,设摄像机在世界坐标系中的位置为
# 10. 透视投影变换(Perspective Projective Transformations)
# 10.1 定义
投影变换是将物体从摄像机坐标系转换到标准设备坐标系(NDC),也就是坐标值在一个
可以将这个过程分为两步,首先构造一个坐标转换,将摄像机的摄影范围构成的视锥体(Frustum)变形成一个立方体(Cuboid),然后再将这个立方体转化为成标准设备坐标系下(NDC)的标准观察体CCV(Canonical View Volume)
NDC坐标系在不同的系统上有不同的约定,在DirectX中,近平面到远平面映射到
# 10.2 求解过程
# 10.2.1 从视锥体到立方体
设摄像机坐标系中的点
设这个转换矩阵为
对于表示一个点的其次坐标,所有数值乘以一个同样的数,所表达的意义相同,所以
由此可以推断出,这个矩阵的第1,2和4行
考虑特殊情况,近平面上的任意一点
由于近平面上的点经过转换后坐标不变,所以
同理,远平面上的任意一个点
由此可知,第三行的数值和
可以得到
得到这个转换矩阵为
# 10.2.2 从立方体到标准观察体
这一步相对简单很多,只要将观察体的中心的
# 10.2.3 合并后的矩阵
最终得到合并后的投影矩阵为
在大部分工程项目中,摄像机的输入参数一般是如下几个
- 宽高比
- 视场角fov,
- 近裁剪距离
- 远裁剪距离
将这些值带入上面的公式,可以得到
一般来说,当针对一个空间点做矩阵转换时,如果
可知
# 10.2.4 深度插值
设摄像机坐标系中有一个线段
可知
设线段的方程为
当投影点
也就是说,当投影点
# 11. 正交投影变换(Orthogonal Projection Transformations)
# 11.1 定义
正交投影没有“远大近小”的效果
# 11.2 求解过程
相比透视投影,正交投影只需要将一个立方体形状的摄影范围最终映射到标准设备坐标系(NDC)下的一个标准立方体(Cuboid)即可
同理,在工程中一般标注一个正交投影摄像机的主要参数如下
- 近裁剪距离
- 远裁剪距离
- 左侧裁剪面坐标
- 右侧裁剪面坐标
- 上侧裁剪面坐标
- 下侧裁剪面坐标
带入上面的公式可以得到