在齐次坐标系统中,一个2D点的坐标通常表示为三维向量(x, y, w),其中x和y是点在笛卡尔坐标系统中的坐标,而w是一个额外的权重因子。齐次坐标中的点(x, y, w)可以通过除以w来得到它在标准笛卡尔坐标中的坐标(x/w, y/w)。这种表示方式允许我们用同一种结构形式表示点和向量,并且可以更方便地进行仿射变换。
注意目前并不知道z是如何变化的
M
p
e
r
s
p
→
o
r
t
h
o
4
×
4
⋅
(
x
y
z
1
)
=
(
n
z
x
n
z
y
?
1
)
…
…
…
…
①
M_{persp\to ortho}^{4\times4}·\Large\begin{pmatrix} x\\y\\z\\1 \end{pmatrix} =\begin{pmatrix} \frac{n}{z}x\\\frac{n}{z}y\\?\\1 \end{pmatrix} \dots\dots\dots\dots①
Mpersp→ortho4×4⋅xyz1=znxzny?1…………①
这个点在齐次坐标下,所有分量同时×Z,在笛卡尔坐标系下仍然表示同一个点
(
n
z
x
n
z
y
?
1
)
=
(
n
x
n
y
?
z
)
\Large\begin{pmatrix}\frac{n}{z}x\\\frac{n}{z}y\\?\\1 \end{pmatrix} = \begin{pmatrix}nx\\ny\\?\\z\end{pmatrix}
znxzny?1=nxny?z
最后,Squish矩阵 Mpersp->ortho矩阵为
[
n
0
0
0
0
n
0
0
0
0
n
+
f
−
f
n
0
0
1
0
]
\large \begin{bmatrix} n&0&0&0 \\ 0 & n&0&0 \\ 0&0&n+f&-fn\\ 0&0&1&0 \end{bmatrix} \quad
n0000n0000n+f100−fn0
(2)正交投影
透视投影第二步是正交投影,所以需要正交矩阵Mortho(由平移加缩放矩阵组成)
[
2
r
−
l
0
0
0
0
2
t
−
b
0
0
0
0
2
n
−
f
0
0
0
0
1
]
[
1
0
0
−
r
+
l
2
0
1
0
−
t
+
b
2
0
0
1
−
n
+
f
2
0
0
0
1
]
\large \begin{bmatrix} \frac{2}{r-l}&0&0&0 \\ 0 & \frac{2}{t-b}&0&0 \\ 0&0&\frac{2}{n-f}&0\\ 0&0&0&1 \end{bmatrix} \large \begin{bmatrix} 1&0&0&-\frac{r+l}{2} \\ 0 &1&0&-\frac{t+b}{2} \\ 0&0&1&-\frac{n+f}{2}\\ 0&0&0&1 \end{bmatrix}
r−l20000t−b20000n−f200001100001000010−2r+l−2t+b−2n+f1
最终Mpersp 为上面三个矩阵的乘积
M
p
e
r
s
p
=
M
o
r
t
h
o
⋅
M
p
e
r
s
p
→
o
r
t
h
o
=
[
2
n
r
−
l
0
l
+
r
l
−
r
0
0
2
n
t
−
b
b
+
t
b
−
t
0
0
0
n
+
f
n
−
f
−
2
n
f
n
−
f
0
0
1
0
]
M_{persp} = M_{ortho}·M_{persp\to ortho}=\Large\color{red} \begin{bmatrix} \frac{2n}{r-l}&0&\frac{l+r}{l-r}&0 \\ 0 & \frac{2n}{t-b}&\frac{b+t}{b-t}&0 \\ 0&0&\frac{n+f}{n-f}&\frac{-2nf}{n-f}\\ 0&0&1&0 \end{bmatrix} \quad
Mpersp=Mortho⋅Mpersp→ortho=r−l2n0000t−b2n00l−rl+rb−tb+tn−fn+f100n−f−2nf0