三维
(x,y,z,1)表示point, (x,y,z,0)表示vector
x′y′z′1=adg0beh0cfi0dxdydz1xyz1
旋转
旋转矩阵是正交矩阵,正交矩阵的转置与它的逆相同
假设绕某个轴旋转
Rx(α)=10000cosαsinα00−sinαcosα00001
Ry(α)=cosα0−sinα00100sinα0cosα00001
Rz(α)=cosαsinα00−sinαcosα0000100001
x×z 沿 y 轴负方向,所以绕 y 轴旋转时正负号有所变化
自由旋转
Rx(α,β,γ)=Rx(α)Rx(β)Rx(γ)
称为Euler angles(欧拉角),将复杂的旋转分解为绕三个轴不同程度的旋转
Rodrigues’ Rotation Formula
默认旋转轴经过原点,将物体以n为轴转α角度
R(n,α)=cos(α)I+(1−cos(α))nnT+sin(α)0nz−ny−nz0nxny−nx0
View Transformation 视图变换
MVP变换->model、view、projection(模型、视图、投影)
首先定义相机
- position e
- look-at direction g^
- up direction t^
只要相机与物体之间相对位置不变,拍出照片始终相同。为此,我们可以将相机移动到原点,看向−z轴方向,向上y轴方向。
因此,首先我们需要将其移动到原点,然后旋转使得方向对齐。
平移操作
T=100001000010−xe−ye−ze1
对于旋转操作,我们可以从逆过程来考虑。考虑将正常坐标系旋转至原始矩阵。
Projection Transformation 投影变换
正交投影与透视投影
透视投影给人一种近大远小的感觉
正交投影
简单理解方式,摆好相机之后,将z轴方向扔掉。就可以在x,y平面上看到正交投影的结果。
一般来说,我们需要将结果缩放到[−1,+1]2之间
透视投影
一些特点:
- 近平面各个点不变
- 原平面各个点z值不变
- 中心点不变
xyz1→nx/zny/zunknown1=xnynunknownz
根据上式,变换矩阵可以写为
n0?00n?000?100?0
根据特点123求解第三行
首先根据特点1,可得
z=nnx/nny/nn1=nxnyn2n
不妨设第三行为
(00AB)xyn1=n2
同理,根据2和3,对于远平面的中点,我们有
(00AB)00f1=f2
解得
A=n+f,B=−nf