投影矩阵推导

其实问题就是给定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 ′ x = d z \dfrac{x'}{x} = \dfrac{d}{z} xx=zd

y ′ y = d z \dfrac{y'}{y} = \dfrac{d}{z} yy=zd

综合上式,求出 x ′ x' x y ′ y' y
x ′ = h x t a n α 2 z x'= \dfrac{h x}{tan\dfrac{\alpha}{2} z} x=tan2αzhx

y ′ = h y t a n α 2 z y'= \dfrac{h y}{tan\dfrac{\alpha}{2} z} y=tan2αzhy

位于视锥体中的 x ′ x' x y ′ y' y满足 − w ≤ x ′ ≤ w -w \leq x' \leq w wxw − h ≤ y ′ ≤ h -h \leq y' \leq h hyh,那么将其归一化有:
x ′ = x r t a n α 2 z x'= \dfrac{x}{r tan\dfrac{\alpha}{2} z} x=rtan2αzx

y ′ = y t a n α 2 z y'= \dfrac{y}{tan\dfrac{\alpha}{2} z} y=tan2αzy

注意到上述求得的 x ′ x' x y ′ y' y里的分母中均包含 z z z,为了用矩阵形式来表达投影变换,必须要借助齐次坐标,有:
[ x , y , z , 1 ] ⋅ [ 1 r t a n α 2 0 0 0 0 1 t a n α 2 0 0 0 0 A 1 0 0 B 0 ] = [ x ′ ⋅ z , y ′ ⋅ z , A z + B , z ] [x, y, z, 1] \cdot \begin{bmatrix} \dfrac{1}{rtan\dfrac{\alpha}{2}} & 0 & 0 & 0 \\ 0 & \dfrac{1}{tan\dfrac{\alpha}{2}} & 0 & 0 \\ 0 & 0 & A & 1 \\ 0 & 0 & B & 0 \end{bmatrix} = [x'\cdot z, y' \cdot z, Az+B, z] [x,y,z,1]rtan2α10000tan2α10000AB0010=[xz,yz,Az+B,z]

因而可得到 z ′ = A z + B z z'=\dfrac{Az+B}{z} z=zAz+B。同时,我们希望 z ′ z' z满足:

  1. 0 ≤ z ′ ≤ 1 0 \leq z' \leq 1 0z1
  2. 对于原始的 z 1 , z 2 z_1,z_2 z1,z2,如果满足 z 1 < z 2 z_1 < z_2 z1<z2,那么 z 1 ′ < z 2 ′ z'_1 < z'_2 z1<z2

因为原始的 z z z范围为 n ≤ z ≤ f n \leq z \leq f nzf,所以有:
{ A n + B n = 0 A f + B f = 1 \begin{cases} \dfrac{An+B}{n} = 0 \\ \dfrac{Af+B}{f} = 1 \end{cases} nAn+B=0fAf+B=1
解方程组,得到:
{ A = f f − n B = n f n − f \begin{cases} A = \dfrac{f}{f - n} \\ B = \dfrac{nf}{n - f} \end{cases} A=fnfB=nfnf
综上,得到最终的投影矩阵为
[ 1 r t a n α 2 0 0 0 0 1 t a n α 2 0 0 0 0 f f − n 1 0 0 n f n − f 0 ] \begin{bmatrix} \dfrac{1}{rtan\dfrac{\alpha}{2}} & 0 & 0 & 0 \\ 0 & \dfrac{1}{tan\dfrac{\alpha}{2}} & 0 & 0 \\ 0 & 0 & \dfrac{f}{f - n} & 1 \\ 0 & 0 & \dfrac{nf}{n - f} & 0 \end{bmatrix} rtan2α10000tan2α10000fnfnfnf0010

所以,投影变换后的 z ′ = f f − n + n f ( n − f ) z z' = \dfrac{f}{f - n} + \dfrac{nf}{(n - f)z} z=fnf+(nf)znf

让我们观察下不同情况下 n n n f f f的取值变换 z ′ z' z的函数曲线。

左边的曲线是 ( n = 1 , f = 100 ) (n=1,f=100) (n=1,f=100),右边的曲线是 ( n = 10 , f = 100 ) (n=10,f=100) (n=10,f=100)。不难看出,当 n n n f f f的差距越小时,变换后的 z ′ z' z精度更高。

在进行投影变换之后,透视除法之前,这时候坐标系称作齐次剪裁空间或者投影空间。在透视除法之后,被称作标准设备坐标系。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值