这章的知识点书上是按照从易到难的顺序安排的,但本文为了使变换的顺序符合逻辑,就按照渲染的顺序来阐明概念了。本文有许多概念都是根据个人对于概念的理解,以大白话的形式表达,如有不对,请及时纠正,谢谢各位大佬。
Viewing Transformation视图变换
- 描述的是一个将canonical坐标系中的三维坐标映射到以像素为单位的图片中的过程
- 其中包含
- Camera Transformation
- 根据之前书中第二章提到的,以相机(模拟眼睛看物体)的有关信息构建一个坐标系的方法中
- 所需的信息
- 眼睛位置e
- 眼睛所看向的方向g
- view-up vector将视角区分左右的任意向量t(书中表达为将头切分成左右两半的平面上的向量)
- 其中的具体逻辑就不赘述了下面是结果
- 所需的信息
- 再根据章节7.5中的根据某坐标系的原点和三个basis vector即可将原坐标系中的点转换为该坐标系中坐标的变换矩阵canonical-to-basis matrix
- 根据之前书中第二章提到的,以相机(模拟眼睛看物体)的有关信息构建一个坐标系的方法中
-
Projection Transformation
-
该变换由两部分组成
即Perspective Projection和Orthographic Projection
-
Perspective Projection
-
说该变换之前需要知道
-
由书中关于眼睛看向view plane的侧面截图根据三角相似原理可以得出
- 而此公式中带有除法,而仿射变换中却没有包含实现该功能的矩阵
- 得益于齐次坐标多出的那一维
利用此性质可以实现除法
- 实现这一功能的变换叫做Projective Transformation
-
- 得益于Projective Transformation实现除以z这个操作变得可以轻松实现
- Perspective Matrix P
- 其中,由于之前的三角形相似原理,
而对于x也是同理
- 值得注意的是这里的n和z都是小于0(眼睛位于原点是看向-z方向的)的所以这个变换矩阵并不会错误的导致坐标符号反向
- P矩阵的第三行实现了z坐标在near plane和far plane的点z值不变,而介于其中的点z值的大小顺序不变,即某点原来的z值小于另一点的z值而经过变换之后仍小于该点的z值
- 利用上述性质便于之后进行Hidden Surface Removal
-
-
- Orthographic Projection
- 经过之前的Perspective Projection Transformation已经将view volume转换为一个
的长方体,称作Orthographic View Volume
- 由于目标是将该长方体先将从原点看去
这面的中心位移至原点,再压缩成一个长宽为2的正方体,
- 经过以下矩阵可以实现上述功能(可以自行推导),一个相对简单的仿射变换
- 经过之前的Perspective Projection Transformation已经将view volume转换为一个
-
先进行Perspective Projection Transformation再进行Orthographic Projection就是Projection Transformation的整个变换了
-
-
Viewport Transformation
-
又称作Windowing Transformation
-
将经过Projection Transformation得到的
正方体,将由x轴和y轴构成的
面映射到屏幕像素为
的
的长方体上
-
不难看出,只需要进行简单的缩放和位移操作即可
-
-
结合上述三个大步骤即为整个Viewing Transformation的过程
- Field-of-View
- 垂直可视角度根据三角形相似原理可以得出
- 垂直可视角度根据三角形相似原理可以得出