在渲染开始前,从local space转换到world space,再转换到camera space,使用矩阵变换
变换矩阵
先给出变换矩阵
[
x
p
y
p
z
p
1
]
=
[
1
0
0
x
e
0
1
0
y
e
0
0
1
z
e
0
0
0
1
]
[
x
u
x
v
x
w
0
y
u
y
v
y
w
0
z
u
z
v
z
w
0
0
0
0
1
]
[
u
p
v
p
w
p
1
]
p
x
y
z
=
[
u
v
w
0
0
0
0
1
]
p
u
v
w
\begin{bmatrix} x_p \\ y_p \\ z_p \\ 1 \\ \end{bmatrix} = \\ \begin{bmatrix} 1 & 0 & 0 & x_e \\ 0 & 1 & 0 & y_e \\ 0 & 0 & 1 & z_e \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x_u & x_v & x_w & 0 \\ y_u & y_v & y_w & 0 \\ z_u & z_v & z_w & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} u_p \\ v_p \\ w_p \\ 1 \\ \end{bmatrix} \\ p_{xyz}= \begin{bmatrix} u & v & w & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} p_{uvw}\\
⎣⎢⎢⎡xpypzp1⎦⎥⎥⎤=⎣⎢⎢⎡100001000010xeyeze1⎦⎥⎥⎤⎣⎢⎢⎡xuyuzu0xvyvzv0xwywzw00001⎦⎥⎥⎤⎣⎢⎢⎡upvpwp1⎦⎥⎥⎤pxyz=[u0v0w001]puvw
and
[
u
p
v
p
w
p
1
]
=
[
x
u
y
u
z
u
0
x
v
y
v
z
v
0
x
w
y
w
z
w
0
0
0
0
1
]
[
1
0
0
−
x
e
0
1
0
−
y
e
0
0
1
−
z
e
0
0
0
1
]
[
x
p
y
p
z
p
1
]
p
u
v
w
=
[
u
v
w
0
0
0
0
1
]
−
1
p
x
y
z
\begin{bmatrix} u_p \\ v_p \\ w_p \\ 1 \\ \end{bmatrix} = \\ \begin{bmatrix} x_u & y_u & z_u & 0 \\ x_v & y_v & z_v & 0 \\ x_w & y_w & z_w & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & -x_e \\ 0 & 1 & 0 & -y_e \\ 0 & 0 & 1 & -z_e \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} \begin{bmatrix} x_p \\ y_p \\ z_p \\ 1 \\ \end{bmatrix} \\ p_{uvw}= \begin{bmatrix} u & v & w & 0 \\ 0 & 0 & 0 & 1 \\ \end{bmatrix} ^{-1} p_{xyz}\\
⎣⎢⎢⎡upvpwp1⎦⎥⎥⎤=⎣⎢⎢⎡xuxvxw0yuyvyw0zuzvzw00001⎦⎥⎥⎤⎣⎢⎢⎡100001000010−xe−ye−ze1⎦⎥⎥⎤⎣⎢⎢⎡xpypzp1⎦⎥⎥⎤puvw=[u0v0w001]−1pxyz
对于点 p p p,其中 p u v w p_{uvw} puvw 是 u v w uvw uvw 坐标系下的坐标, p x y z p_{xyz} pxyz 是 x y z xyz xyz 坐标系下的坐标。 u v w uvw uvw 坐标系的坐标原点在 x y z xyz xyz 坐标系下的坐标为 e = ( x e , y e , z e ) e=(x_e,y_e,z_e) e=(xe,ye,ze) , u v w uvw uvw坐标系的基底向量在 x y z xyz xyz坐标系下分别是 u = ( x u , y u , z u ) 、 v = ( x v , y v , z v ) 、 w = ( x w , y w , z w ) u=(x_u,y_u,z_u)、v=(x_v,y_v,z_v)、w=(x_w,y_w,z_w) u=(xu,yu,zu)、v=(xv,yv,zv)、w=(xw,yw,zw)。