GAMES101 第4讲 观察变换(视图变换与投影变换)
观察变换
观察变换(Viewing Transform)是将世界坐标系中的物体变换到裁剪坐标系中的过程
视图/相机变换
相机坐标系
视图/相机变换(View/Camera Transform)是将世界坐标系中的物体变换到相机坐标系中的过程

视图变换是在摆放照相机, 所以我们要定义相机的参数:
- 坐标(Position):
- 观察方向(Look At/Gaze):
- 上方向(Up):

为了方便计算和理解, 我们认为相机坐标系是:
- 相机坐标永远位于原点
- 相机的上方向永远是 轴正方向
- 相机的观察方向永远是 轴负方向, 即 方向
- 所有物体随着相机的移动而移动
视图变换矩阵

假如相机本身的坐标是 , 观察方向是 , 上方向是 , 那么将其转换为相机坐标系的操作则有:
- 将 移动到原点
- 将 转换为 轴
- 将 转换为 轴
- 将 转换为 轴
将以上操作写成矩阵的形式:
其中 为旋转矩阵部分, 为平移矩阵部分
通过从 旋转到 轴来直接推导旋转矩阵较为困难
但是已知 轴的单位向量 , 求旋转到 的旋转矩阵 是比较容易的
同时又因为旋转矩阵是正交矩阵, 所以有
投影变换
投影变换(Projection Transform)是将相机坐标系中的物体变换到裁剪坐标系中的过程

投影变换分为正交投影(Orthographic Projection) 和 透视投影(Perspective Projection)
正交投影

较为简单的理解:
- 相机放在原点, 观察方向是 轴, 向上方向是 轴
- 将物体的 坐标直接扔掉, 保留 坐标
- 将 坐标映射到 的范围内(方便后续裁剪)

在图形学中的正交投影:
- 在空间中定义一个立方体, 并规定其左右, 下上, 远近的边界分别在 轴上的范围
- 将这个立方体映射到 的正则立方体(Canonical Cube)中
- 将立方体的中心移动到原点
- 将 轴分别拉伸到 的范围内
- 注意: 不会抛弃 轴的值, 值越小, 距离相机越远
矩阵的形式为(先平移再缩放):
左右手坐标系的不同会导致 轴的方向不同, 所以在计算时要注意
透视投影
透视投影使用的最广泛的投影方式, 也是人眼看到的世界的投影方式
回顾: 与 表示的是三维空间的同一个点 , 注意
因此, 与 表示的是三维空间的同一个点 , 注意

- 先将视锥体的远端平面"挤压"到和近端平面齐平的位置, 此时成为了一个立方体
- 将立方体映射到 的正则立方体(Canonical Cube)中, 操作类似于正交投影
挤压的过程中为了便于理解和计算, 我们规定:
近端平面的所有坐标都不变, 视锥体远端平面的 坐标也都不变, 远端平面中心点的所有坐标也不发生变化, 此时挤压操作只有唯一解

根据相似三角形, 所有点的
在齐次坐标中, 有:
我们想要知道挤压矩阵 的形式, 使得:
可以反推出:
又由于近端平面的所有坐标都不变, 我们假设有一个近平面上的点 , 则有:
我们可以推断出矩阵的第三行 满足:
由于远端平面的中心点的坐标不变, 我们假设有一个远平面上的中心点 , 则有:
我们可以推断出矩阵的第三行 满足:
综上有:
解方程得到:
所以挤压操作的矩阵形式为:
透视投影的矩阵形式为(先挤压再正交):
思考: 在挤压操作时, 远端平面与近端平面中间的 坐标是如何变化的? 变得更远(z更小)还是更近(z更大)?
评论