透视投影理解

2 篇文章 0 订阅

透视投影以视锥体为核心,将视锥体的点对应到 ( − 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=zyyd=zyd=zycot(2α)
同理,
x d = x ⋅ c o t ( α 2 ) z x_d = \frac {x\cdot cot(\frac{\alpha}2)}z xd=zxcot(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=arzxcot(2α)zycot(2α)01=z1arxcot(2α)ycot(2α)0zarxcot(2α)ycot(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} ar1000010000100001cot(2α)0000cot(2α)0000010000xyz1(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(f1n1)=2B=nf2nf

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=nf2nfA+fB=1}A=1nf2n=nfnf

我们将 ( A − 1 ) (A-1) (A1)式中第三行替换成 [ 0 , 0 , A , B ] [0 ,0, A, B] [0,0,A,B], ( A − 1 ) (A-1) (A1)式变成
( 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} ar1000010000100001cot(2α)0000cot(2α)0000nfnf100nf2nf0xyz1=arxcot(2α)ycot(2α)Az+Bzzarxcot(2α)zycot(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α)0000nfnf100nf2nf0(A-3)
在用投影矩阵乘上顶点坐标之后,顶点坐标被变换到我们所说的裁剪坐标系之下,在执行透视除法之后顶点坐标被变换到了 NDC 坐标系(NormalizedDeviceCoordinates)之下。

α ≠ 0 , n ≠ f \alpha\neq 0,n\neq f α=0,n=f的情况下, ( A − 3 ) (A-3) (A3)式矩阵可逆矩阵,其变换为线性变换,并且是同构变换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值