Transform
向量和矩阵
- 向量点乘:获取投影、获取夹角
- 向量叉乘:判断左右、判断内外
- 叉乘的矩阵形式:
- 叉乘的矩阵形式:
2D 变换
Linear Transform = Matrix
- 使用矩阵来表示线性变换
Scale Matrix
- 称
为缩放矩阵, 和 是横纵轴的缩放比例
Reflection Matrix
- 这个矩阵可以让图像关于
轴镜像翻转
Rotate Matrix
- 以
为中心,旋转 :
Homogenous Coordinates 齐次坐标
- 矩阵无法表示平移变换,只有
的形式,才能表示包含平移变换在内的二维变换 - 为了统一变换的形式,引入第三个维度处理平移变换:
- 2D Point
- 2D Vector
- 2D Point
- 在此视角下,平移变换变为:
- 通过第三维的
取值区分点和向量,具有如下性质:- 向量 + 向量 = 向量
- 点 - 点 = 向量
- 点 + 向量 = 向量
- 对“点 + 点”的情况进行扩充定义:
,故“点 + 点 = 中点”
齐次坐标下的仿射变换
所有的仿射变换:
都可以被写成齐次坐标下的矩阵乘法:
具体到变换:
- Scale
- Rotation
- Translation
逆变换
- 逆变换等价于乘逆矩阵
变换组合
- 变换的组合等价于不断左乘矩阵,因此复合变换的顺序是从右向左施加,例如
是先旋转再平移。
3D 变换
三维齐次坐标
- 3D Point
- 3D Vector
- 扩充定义点:
- 任何仿射变换也一样可以写成齐次坐标
三维齐次坐标运算矩阵
- 平移、缩放较为简单,旋转的正方向符合右手螺旋
- 以原点为中心,绕
轴旋转
- 以原点为中心,绕
轴旋转
- 以原点为中心,绕
轴旋转
任意旋转
将任意旋转分解为绕轴旋转:
- roll 绕
轴旋转(左右摇摆) - pitch 绕
轴旋转(前后俯仰) - yaw 绕
轴旋转(左右旋转)
Rodrigues' Rotation Formula
绕轴
- 默认轴
的起点(即旋转的中心点)为原点,如果需要绕其他中心点旋转,则可进行平移→旋转→平移组合操作 - 最右侧的矩阵就是叉乘系数矩阵,即
Viewing Transformation 观测变换
如何获取一张图像(照片):MVP 过程
- Model transformation:放置好场景和模型
- View transformation:调整好相机
- Projection transformation:获取场景在相机上的投影
View/Camera Transformation 视图变换
相机的参数
- Position 位置:
- Look-at/gaze direction 朝向:
- Up direction 向上方向:
- 向上方向刻画的是相机在其所在平面内的旋转,相当于实体相机镜头和上方闪光灯的连线指向
视图变换
由于拍摄结果只与相对位置的有关,同时移动相机和模型,与只移动模型是等价的,故一般让相机位置固定,参数如下:
- 位置在原点
- 朝向为
方向, - 向上方向为
, 通过一系列变换,可以将任意状态的相机转化为标准位置上的相机。据此思路可推导出视图变换矩阵 :
$R_{view}$ 求解
在推导
故可从
Model Transformation 模型变换
在调整相机到固定位置时,为了保持相对位置不变,模型和相机会一起进行变换,所以,也常常会将模型变换和视图变换统称为 ModelView Transformation,即模型视图变换
Projection Transformation 投影变换
投影就是从 3D 空间到 2D 图像的过程,常见的投影方式有:
- Orthographic projection 正交投影:没有近大远小
- Perspective projection 透视投影:近大远小
正交投影
将一个
$[f,n]$ 的原因
由于我们是看向
由此可得正交变换矩阵:
透视投影
将透视投影拆成两个操作过程:
- 将远平面缩放到与近平面等大小
- 将缩放后的远平面正交投影到近平面上 假设远近平面都不动,可以得到缩放矩阵:
因此有:
视锥
视锥的参数:
- Aspect ratio 长宽比
- Virtical Field of View (fovY) 垂直可视角度 与近平面的转换: