投影矩阵求逆
什么是投影矩阵的逆矩阵呢?从几何意义上来讲,就是把投影到NDC的坐标转化为观察空间下的坐标。
假设y方向的视域角
α
\alpha
α,视域的宽高比为
r
r
r,投影平面距离摄像机的距离为
d
d
d,视域的宽为
w
w
w,高为
h
h
h,近剪裁面距离摄像机的距离为
n
n
n,远剪裁面距离摄像机的距离为
f
f
f。首先有:
r
=
w
h
r= \frac{w}{h}
r=hw
t a n α 2 = h d tan\frac{\alpha}{2} = \frac{h}{d} tan2α=dh
假设任一点
P
P
P,投影后的坐标为
(
x
,
y
,
z
)
(x, y, z)
(x,y,z),观察空间下的坐标为
(
x
′
,
y
′
,
z
′
)
(x', y', z')
(x′,y′,z′),那么有:
x
′
w
x
=
z
′
d
\dfrac{x'}{wx} = \dfrac{z'}{d}
wxx′=dz′
y ′ h y = z ′ d \dfrac{y'}{hy} = \dfrac{z'}{d} hyy′=dz′
这里,分别给 x x x和 y y y乘以 w w w和 h h h是因为NDC的坐标是归一化过的,要先还原到 [ − w , w ] [-w, w] [−w,w]和 [ − h , h ] [-h, h] [−h,h]的取值范围。
综合上式,求出
x
′
x'
x′和
y
′
y'
y′:
x
′
=
z
′
w
x
d
=
z
′
r
t
a
n
(
α
2
)
x
x' = \dfrac{z'wx}{d} = z'rtan(\dfrac{\alpha}{2})x
x′=dz′wx=z′rtan(2α)x
y ′ = z ′ h y d = z ′ t a n ( α 2 ) y y' = \dfrac{z'hy}{d} = z'tan(\dfrac{\alpha}{2})y y′=dz′hy=z′tan(2α)y
注意到上述求得的
x
′
x'
x′和
y
′
y'
y′里的分母中均包含
z
′
z'
z′,为了用矩阵形式来表达逆投影变换,必须要借助齐次坐标,对
(
x
′
,
y
′
,
z
′
,
1
)
(x',y',z',1)
(x′,y′,z′,1)各除以
z
′
z'
z′,即转换为
(
x
′
z
′
,
y
′
z
′
,
1
,
1
z
′
)
(\dfrac{x'}{z'}, \dfrac{y'}{z'}, 1, \dfrac{1}{z'})
(z′x′,z′y′,1,z′1)。 有:
[
x
,
y
,
z
,
1
]
⋅
[
r
t
a
n
α
2
0
0
0
0
t
a
n
α
2
0
0
0
0
0
A
0
0
1
B
]
=
[
x
′
z
′
,
y
′
z
′
,
1
,
A
z
+
B
]
[x, y, z, 1] \cdot \begin{bmatrix} rtan\dfrac{\alpha}{2} & 0 & 0 & 0 \\ 0 & tan\dfrac{\alpha}{2} & 0 & 0 \\ 0 & 0 & 0 & A \\ 0 & 0 & 1 & B \end{bmatrix} = [\dfrac{x'}{z'}, \dfrac{y'}{z'}, 1, Az+B]
[x,y,z,1]⋅⎣⎢⎢⎢⎢⎡rtan2α0000tan2α00000100AB⎦⎥⎥⎥⎥⎤=[z′x′,z′y′,1,Az+B]
由投影变换可知,
z
z
z可以写成:
z
=
f
f
−
n
z
′
+
n
f
n
−
f
z
′
z = \dfrac{\dfrac{f}{f - n}z' + \dfrac{nf}{n - f}}{z'}
z=z′f−nfz′+n−fnf
由此可知,解得
1
z
′
\dfrac{1}{z'}
z′1:
1
z
′
=
n
−
f
n
f
z
+
1
n
\dfrac{1}{z'} = \dfrac{n - f}{nf}z + \dfrac{1}{n}
z′1=nfn−fz+n1
也就有:
{
A
=
n
−
f
n
f
B
=
1
n
\begin{cases} A = \dfrac{n - f}{nf} \\ B = \dfrac{1}{n} \end{cases}
⎩⎪⎨⎪⎧A=nfn−fB=n1
最终得到投影矩阵的逆矩阵为:
[
r
t
a
n
α
2
0
0
0
0
t
a
n
α
2
0
0
0
0
0
n
−
f
n
f
0
0
1
1
n
]
\begin{bmatrix} rtan\dfrac{\alpha}{2} & 0 & 0 & 0 \\ 0 & tan\dfrac{\alpha}{2} & 0 & 0 \\ 0 & 0 & 0 & \dfrac{n - f}{nf} \\ 0 & 0 & 1 & \dfrac{1}{n} \end{bmatrix}
⎣⎢⎢⎢⎢⎢⎢⎢⎡rtan2α0000tan2α00000100nfn−fn1⎦⎥⎥⎥⎥⎥⎥⎥⎤