投影矩阵求逆

投影矩阵求逆

什么是投影矩阵的逆矩阵呢?从几何意义上来讲,就是把投影到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=dzwx=zrtan(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=dzhy=ztan(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'}) (zx,zy,1,z1)。 有:
[ 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=[zx,zy,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=zfnfz+nfnf
由此可知,解得 1 z ′ \dfrac{1}{z'} z1
1 z ′ = n − f n f z + 1 n \dfrac{1}{z'} = \dfrac{n - f}{nf}z + \dfrac{1}{n} z1=nfnfz+n1
也就有:
{ A = n − f n f B = 1 n \begin{cases} A = \dfrac{n - f}{nf} \\ B = \dfrac{1}{n} \end{cases} A=nfnfB=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α00000100nfnfn1

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值