目录
透视投影以视锥体为核心,将视锥体的点对应到 ( − 1 , − 1 , − 1 ) − ( 1 , 1 , 1 ) (-1,-1,-1) - (1,1,1) (−1,−1,−1)−(1,1,1)的立方体盒, 视 锥 体 → 裁 剪 坐 标 系 视锥体 \to 裁剪坐标系 视锥体→裁剪坐标系。
1. 投影面
d d d
高为
2
2
2,垂直于
z
z
z轴的平面,距原点的距离为
1
d
=
t
a
n
(
α
2
)
⇒
d
=
1
t
a
n
(
α
2
)
=
c
o
t
(
α
2
)
\frac1d = tan(\frac{\alpha}2) \Rightarrow d=\frac1{tan(\frac{\alpha}2)}=cot(\frac{\alpha}2)
d1=tan(2α)⇒d=tan(2α)1=cot(2α)
( x d , y d ) (x_d, y_d) (xd,yd)
任意点
P
P
P 点投影到投影平面,其投影关系为:
y
d
d
=
y
z
⇒
y
d
=
y
⋅
d
z
=
y
⋅
c
o
t
(
α
2
)
z
\frac{y_d}d=\frac yz \Rightarrow y_d = \frac {y\cdot d}z = \frac {y\cdot cot(\frac{\alpha}2)}z
dyd=zy⇒yd=zy⋅d=zy⋅cot(2α)
同理,
x
d
=
x
⋅
c
o
t
(
α
2
)
z
x_d = \frac {x\cdot cot(\frac{\alpha}2)}z
xd=zx⋅cot(2α)
由于投影面
X
Y
XY
XY存在宽高比
a
r
=
W
H
ar=\frac WH
ar=HW,视锥体内
x
d
x_d
xd 还需要变换到
[
−
1
,
1
]
[-1,1]
[−1,1]内,
x
d
a
=
x
d
a
r
x_{da} = \frac{x_d}{ar}
xda=arxd
( x d a , y d ) (x_{da}, y_d) (xda,yd)齐次化
用齐次坐标表示上述
(
x
d
a
,
y
d
)
(x_{da},y_d)
(xda,yd)坐标为
(
x
d
a
y
d
0
1
)
=
(
x
⋅
c
o
t
(
α
2
)
a
r
⋅
z
y
⋅
c
o
t
(
α
2
)
z
0
1
)
=
1
z
(
x
⋅
c
o
t
(
α
2
)
a
r
y
⋅
c
o
t
(
α
2
)
0
z
)
∼
(
x
⋅
c
o
t
(
α
2
)
a
r
y
⋅
c
o
t
(
α
2
)
0
z
)
\begin{pmatrix} x_{da}\\ y_d\\ 0\\ 1 \end{pmatrix}=\begin{pmatrix} \frac {x\cdot cot(\frac{\alpha}2)}{ar\cdot z}\\ \frac {y\cdot cot(\frac{\alpha}2)}z\\ 0\\ 1 \end{pmatrix} = \frac1z \begin{pmatrix} \frac {x\cdot cot(\frac{\alpha}2)}{ar}\\ y\cdot cot(\frac{\alpha}2)\\ 0\\ z \end{pmatrix}\sim \begin{pmatrix} \frac {x\cdot cot(\frac{\alpha}2)}{ar}\\ y\cdot cot(\frac{\alpha}2)\\ 0\\ z \end{pmatrix}
⎝⎜⎜⎛xdayd01⎠⎟⎟⎞=⎝⎜⎜⎛ar⋅zx⋅cot(2α)zy⋅cot(2α)01⎠⎟⎟⎞=z1⎝⎜⎜⎛arx⋅cot(2α)y⋅cot(2α)0z⎠⎟⎟⎞∼⎝⎜⎜⎛arx⋅cot(2α)y⋅cot(2α)0z⎠⎟⎟⎞
上述坐标用矩阵可以描述为
(
1
a
r
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
)
(
c
o
t
(
α
2
)
0
0
0
0
c
o
t
(
α
2
)
0
0
0
0
0
0
0
0
1
0
)
(
x
y
z
1
)
(A-1)
\begin{pmatrix} \frac1{ar} &0 & 0 & 0\\ 0 &1 & 0 & 0\\ 0 &0 & 1 & 0\\ 0 &0 & 0 & 1\\ \end{pmatrix}\begin{pmatrix} cot(\frac{\alpha}2) & 0 & 0 & 0\\ 0 & cot(\frac{\alpha}2) & 0 & 0\\ 0 & 0 & 0 & 0\\ 0 & 0 & 1 & 0\\ \end{pmatrix}\begin{pmatrix} x\\ y\\ z\\ 1\\ \end{pmatrix} \tag{A-1}
⎝⎜⎜⎛ar1000010000100001⎠⎟⎟⎞⎝⎜⎜⎛cot(2α)0000cot(2α)0000010000⎠⎟⎟⎞⎝⎜⎜⎛xyz1⎠⎟⎟⎞(A-1)
在这里,没有使用
z
z
z值,造成了中间矩阵为奇异阵。由于
z
=
0
z=0
z=0,上述映射关系不是线性变换,更不是线性同构。
裁剪坐标系
为了使投影成为一种变换,需要将
z
z
z值考虑进来,我们考虑线段的缩放:
[
n
,
f
]
→
[
−
1
,
1
]
[n,f] \to[-1,1]
[n,f]→[−1,1] ,设
f
(
z
)
=
A
z
+
B
f(z) = Az + B
f(z)=Az+B,经过透视除法之后结果变为下面的式子
A
+
B
z
A + \frac Bz
A+zB
将
n
,
f
n,f
n,f代入上式,得
A
+
B
n
=
−
1
A
+
B
f
=
1
A + \frac Bn = -1 \\ A + \frac Bf = 1 \\
A+nB=−1A+fB=1
A + B n = − 1 A + B f = 1 } ⇒ B ( 1 f − 1 n ) = 2 ⇒ B = 2 n f n − f \left.\begin{matrix} A + \frac Bn = -1 \\ A + \frac Bf = 1 \end{matrix}\right\}\Rightarrow B(\frac1f-\frac1n) = 2 \Rightarrow B = \frac{2nf}{n-f} A+nB=−1A+fB=1}⇒B(f1−n1)=2⇒B=n−f2nf
B = 2 n f n − f A + B f = 1 } ⇒ A = 1 − 2 n n − f = − n − f n − f \left.\begin{matrix} B = \frac{2nf}{n-f} \\ A + \frac Bf = 1 \end{matrix}\right\}\Rightarrow A = 1 - \frac{2n}{n-f} = \frac{-n-f}{n-f} B=n−f2nfA+fB=1}⇒A=1−n−f2n=n−f−n−f
我们将
(
A
−
1
)
(A-1)
(A−1)式中第三行替换成
[
0
,
0
,
A
,
B
]
[0 ,0, A, B]
[0,0,A,B],
(
A
−
1
)
(A-1)
(A−1)式变成
(
1
a
r
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
)
(
c
o
t
(
α
2
)
0
0
0
0
c
o
t
(
α
2
)
0
0
0
0
−
n
−
f
n
−
f
2
n
f
n
−
f
0
0
1
0
)
(
x
y
z
1
)
=
(
x
⋅
c
o
t
(
α
2
)
a
r
y
⋅
c
o
t
(
α
2
)
A
z
+
B
z
)
∼
(
x
⋅
c
o
t
(
α
2
)
z
⋅
a
r
y
⋅
c
o
t
(
α
2
)
z
A
+
B
z
1
)
(A-2)
\begin{pmatrix} \frac1{ar} &0 & 0 & 0\\ 0 &1 & 0 & 0\\ 0 &0 & 1 & 0\\ 0 &0 & 0 & 1\\ \end{pmatrix}\begin{pmatrix} cot(\frac{\alpha}2) & 0 & 0 & 0\\ 0 & cot(\frac{\alpha}2) & 0 & 0\\ 0 & 0 & \frac{-n-f}{n-f} & \frac{2nf}{n-f} \\ 0 & 0 & 1 & 0\\ \end{pmatrix}\begin{pmatrix} x\\ y\\ z\\ 1\\ \end{pmatrix} =\begin{pmatrix} \frac {x\cdot cot(\frac{\alpha}2)}{ar}\\ y\cdot cot(\frac{\alpha}2)\\ Az+B\\ z \end{pmatrix}\sim \begin{pmatrix} \frac {x\cdot cot(\frac{\alpha}2)}{z\cdot ar}\\ \frac{y\cdot cot(\frac{\alpha}2)}z\\ A+\frac Bz\\ 1 \end{pmatrix} \tag{A-2}
⎝⎜⎜⎛ar1000010000100001⎠⎟⎟⎞⎝⎜⎜⎛cot(2α)0000cot(2α)0000n−f−n−f100n−f2nf0⎠⎟⎟⎞⎝⎜⎜⎛xyz1⎠⎟⎟⎞=⎝⎜⎜⎛arx⋅cot(2α)y⋅cot(2α)Az+Bz⎠⎟⎟⎞∼⎝⎜⎜⎜⎛z⋅arx⋅cot(2α)zy⋅cot(2α)A+zB1⎠⎟⎟⎟⎞(A-2)
最终的变换矩阵如下:
(
1
a
r
c
o
t
(
α
2
)
0
0
0
0
c
o
t
(
α
2
)
0
0
0
0
−
n
−
f
n
−
f
2
n
f
n
−
f
0
0
1
0
)
(A-3)
\begin{pmatrix} \frac1{ar}cot(\frac{\alpha}2) & 0 & 0 & 0\\ 0 & cot(\frac{\alpha}2) & 0 & 0\\ 0 & 0 & \frac{-n-f}{n-f} & \frac{2nf}{n-f} \\ 0 & 0 & 1 & 0\\ \end{pmatrix}\tag{A-3}
⎝⎜⎜⎛ar1cot(2α)0000cot(2α)0000n−f−n−f100n−f2nf0⎠⎟⎟⎞(A-3)
在用投影矩阵乘上顶点坐标之后,顶点坐标被变换到我们所说的裁剪坐标系之下,在执行透视除法之后顶点坐标被变换到了 NDC 坐标系(NormalizedDeviceCoordinates)之下。
在 α ≠ 0 , n ≠ f \alpha\neq 0,n\neq f α=0,n=f的情况下, ( A − 3 ) (A-3) (A−3)式矩阵可逆矩阵,其变换为线性变换,并且是同构变换。