资料来自
链接: GAMES:101
齐次方程三维坐标–绕坐标轴旋转
绕y旋转之所有方向会正好相反,是因为右手坐标系下xz得到的y是反向的
xyzxyzxyz...
xy->z, yz->x, x z->-y
进行视图转换
首先确定相机位置
移动相机至原点
根据相对运动原理,移动相机固定移动物体等于物体固定移动相机,所以先把相机移动到原点以便后续的变换?
移动相机到原点的变换矩阵
M
v
i
e
w
M_{view}
Mview在数学上的意义是:
先把e平移到原点
旋转g至-Z
旋转t至Y
旋转(g x t)至X
e、g、t、(g x t)如下图所示
显然平移矩阵应该是
旋转矩阵需要写[g、t、gt]转到单位矩阵 I 的旋转矩阵,也就是
R
v
i
e
w
[
g
×
t
→
t
⃗
−
g
→
n
⃗
]
=
[
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
]
R_{view}\begin{bmatrix} \overrightarrow {g×t} & \vec t & \overrightarrow{-g} & \vec n \end{bmatrix} = \begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 0\\ 0 & 0 & 0 & 1 \end{bmatrix}
Rview[g×tt−gn]=⎣
⎡1000010000100001⎦
⎤
其中
t
⃗
=
[
x
t
y
t
z
t
0
]
T
\vec t = [ x_t\quad y_t\quad z_t\quad 0]^T
t=[xtytzt0]T
因此
R
v
i
e
w
−
1
I
=
[
g
×
t
→
t
⃗
−
g
→
n
⃗
]
R_{view}^{-1}I = \begin{bmatrix} \overrightarrow {g×t} & \vec t & \overrightarrow{-g} & \vec n \end{bmatrix}
Rview−1I=[g×tt−gn]
R
v
i
e
w
−
1
=
[
g
×
t
→
t
⃗
−
g
→
n
⃗
]
=
[
x
g
^
×
t
^
x
t
x
−
g
0
y
g
^
×
t
^
y
t
y
−
g
0
z
g
^
×
t
^
z
t
z
−
g
0
0
0
0
1
]
\begin{equation}\begin{split} R_{view}^{-1} &= \begin{bmatrix} \overrightarrow {g×t} & \vec t & \overrightarrow{-g} & \vec n \end{bmatrix} \\ &=\begin{bmatrix} x_{\hat g ×\hat t} & x_t & x_{-g} & 0 \\ y_{\hat g ×\hat t} & y_t & y_{-g} & 0 \\ z_{\hat g ×\hat t} & z_t & z_{-g} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \end{split}\end{equation}
Rview−1=[g×tt−gn]=⎣
⎡xg^×t^yg^×t^zg^×t^0xtytzt0x−gy−gz−g00001⎦
⎤
再根据旋转矩阵都是正交矩阵,得到
把模型“规范化”
变换到 − 1 3 -1^3 −13的立方体里
透视图的处理
先“收缩”成正交视图的样式
根据相似三角形的原理
(
x
y
z
1
)
\begin{pmatrix} x \\ y \\ z \\ 1 \end{pmatrix}
⎝
⎛xyz1⎠
⎞变成了
(
n
x
/
z
n
y
/
z
u
n
k
n
o
w
n
1
)
\begin{pmatrix} nx/z \\ ny/z \\ unknown \\ 1 \end{pmatrix}
⎝
⎛nx/zny/zunknown1⎠
⎞数乘不变
(
n
x
n
y
s
t
i
l
l
u
n
k
n
o
w
n
z
)
\begin{pmatrix} nx \\ ny \\ still\;unknown \\ z \end{pmatrix}
⎝
⎛nxnystillunknownz⎠
⎞
因此透视投影转正交投影的矩阵满足
可以得出
进一步利用near面和far面上的z没有变化的性质,把z分别换成n和f,就可得M
以上得到了透视转正交的矩阵M