变换(模型、视图、投影)
- 三维变换
- 观测变换(Viewing transformation)
- 视图 (View)
-
- 投影 (Projection)
- 正交(Orthography)
M
o
\quad M_o
Mo
- 透视(Perspective)
M
p
\quad M_p
Mp
- 透视变换,中间平面的
z
z
z 坐标如何变化?
三维变换
- 仿射变换
- 三维旋转变换
- 逆时针角度为正
- 右手系原因,y轴逆时针看去是 zox 平面,所以转角应该是
−
α
-\alpha
−α
- 也可理解为
-
z
×
x
=
y
,
x
×
z
=
−
y
z \times x = y\ , \quad x \times z = -y
z×x=y ,x×z=−y
![三维旋转矩阵](https://img-blog.csdnimg.cn/20200528210655312.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BpeF9jc2Ru,size_16,color_FFFFFF,t_70#pic_center)
- Rodrigues’ Rotation Formula
- 给定过原点旋转轴 n, 旋转角
α
\alpha
α,旋转矩阵如下
- 非过原点轴,先把轴平移到原点,旋转,再平移回去
![RRF旋转矩阵](https://img-blog.csdnimg.cn/2020052821183248.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BpeF9jc2Ru,size_16,color_FFFFFF,t_70#pic_center)
观测变换(Viewing transformation)
视图 (View)
- 什么是视图变换
- 模型变换与视图变换,两者通常一同处理
- 改变模型动作,模型变换
- 改变相机视角,视图变换
- 拍照,相当于投影变换
- 为什么要模型 / 视图变换
- 因为模型有很多顶点
- 这些顶点坐标是模型空间下的
- 需要移动到世界坐标
- 所以要做模型变换
定义相机
- 位置 / position
e
⃗
\quad \vec{e}
e
- 朝向 / gaze direction
g
^
\quad \hat{g}
g^
- 向上方向 / Up direction
t
^
\quad \hat{t}
t^
![定义相机](https://img-blog.csdnimg.cn/20200529101219980.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BpeF9jc2Ru,size_16,color_FFFFFF,t_70#pic_center)
- 约定俗成的相机
- 永远放在原点
- 永远朝向
−
Z
-Z
−Z
-
t
^
=
Y
\hat{t} = Y
t^=Y
如何将相机移动到约定俗成位置
- 相机变换过程
- 平移到原点
- 旋转
g
^
=
−
Z
\ \hat{g} = -Z
g^=−Z
- 旋转
t
^
=
Y
\ \hat{t} = Y
t^=Y
- 旋转
g
×
t
=
X
\ g \times t = X
g×t=X
- 相机变换矩阵推导(旋转矩阵可以逆向思维)
![相机变换矩阵](https://img-blog.csdnimg.cn/20200529102625215.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BpeF9jc2Ru,size_16,color_FFFFFF,t_70#pic_center)
投影 (Projection)
正交(Orthography)
M
o
\quad M_o
Mo
- 简单的正交投影
- Z归零
- 归一化
[
−
1
,
1
]
\ [-1,\ 1]
[−1, 1]
- 常规的正交投影
- 立方体中心平移到原点
- 边长归一化
[
−
1
,
1
]
\ [-1,\ 1]
[−1, 1]
- 正交变换矩阵如下:
![正交变换矩阵](https://img-blog.csdnimg.cn/20200529162028548.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BpeF9jc2Ru,size_16,color_FFFFFF,t_70#pic_center)
透视(Perspective)
M
p
\quad M_p
Mp
- 特点
- 投影方法
- 从透视变换到正交
- 正交投影
- 假设显示屏幕距原点距离为
n
\ n
n
- 透视到投影矩阵推导(根据以下三个点)
- 通俗的讲,把梯形压缩成长方形
- 中间点等比例变换
- 近平面、远平面上的
Z
Z
Z 坐标不变
![压缩图解](https://img-blog.csdnimg.cn/20200529160547413.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3BpeF9jc2Ru,size_16,color_FFFFFF,t_70#pic_center)
(
x
,
y
,
z
,
1
)
→
(
x
′
,
y
′
,
z
,
1
)
(
x
′
,
y
′
,
z
′
,
1
)
→
(
x
′
,
y
′
,
z
′
,
1
)
(x, y, z, 1) \rightarrow (x', y', z, 1) \quad \quad (x', y', z', 1) \rightarrow (x', y', z', 1)
(x,y,z,1)→(x′,y′,z,1)(x′,y′,z′,1)→(x′,y′,z′,1)
- 透视变换矩阵如下
M
p
=
M
o
⋅
(
n
0
0
0
0
n
0
0
0
0
n
+
z
−
n
z
0
0
1
0
)
M_p = M_o \cdot \left( \begin{matrix} n & 0 & 0 & 0 \\ 0 & n & 0 & 0 \\ 0 & 0 & n+z & -nz \\ 0 & 0 & 1 & 0 \end{matrix} \right)
Mp=Mo⋅⎝⎜⎜⎛n0000n0000n+z100−nz0⎠⎟⎟⎞
透视变换,中间平面的
z
z
z 坐标如何变化?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)