透视投影理解

透视投影以视锥体为核心,将视锥体的点对应到((-1,-1,-1) - (1,1,1))的立方体盒,(视锥体 o 裁剪坐标系)

1. 投影面

(d)

高为(2),垂直于(z)轴的平面,距原点的距离为

[frac1d = tan(frac{alpha}2) Rightarrow d=frac1{tan(frac{alpha}2)}=cot(frac{alpha}2) ]

((x_d, y_d))

任意点(P) 点投影到投影平面,其投影关系为:

[frac{y_d}d=frac yz Rightarrow y_d = frac {ycdot d}z = frac {ycdot cot(frac{alpha}2)}z ]

同理,

[x_d = frac {xcdot cot(frac{alpha}2)}z ]

由于投影面(XY)存在宽高比 (ar=frac WH),视锥体内(x_d) 还需要变换到([-1,1])内,

[x_{da} = frac{x_d}{ar} ]

((x_{da}, y_d))齐次化

用齐次坐标表示上述((x_{da},y_d))坐标为

[egin{pmatrix} x_{da}\ y_d\ 0\ 1 end{pmatrix}=egin{pmatrix} frac {xcdot cot(frac{alpha}2)}{arcdot z}\ frac {ycdot cot(frac{alpha}2)}z\ 0\ 1 end{pmatrix} = frac1z egin{pmatrix} frac {xcdot cot(frac{alpha}2)}{ar}\ ycdot cot(frac{alpha}2)\ 0\ z end{pmatrix}sim egin{pmatrix} frac {xcdot cot(frac{alpha}2)}{ar}\ ycdot cot(frac{alpha}2)\ 0\ z end{pmatrix} ]

上述坐标用矩阵可以描述为

[egin{pmatrix} frac1{ar} &0 & 0 & 0\ 0 &1 & 0 & 0\ 0 &0 & 1 & 0\ 0 &0 & 0 & 1\ end{pmatrix}egin{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}egin{pmatrix} x\ y\ z\ 1\ end{pmatrix} ag{A-1} ]

在这里,没有使用(z)值,造成了中间矩阵为奇异阵。由于(z=0),上述映射关系不是线性变换,更不是线性同构。

裁剪坐标系

为了使投影成为一种变换,需要将(z)值考虑进来,我们考虑线段的缩放: ([n,f] o[-1,1]) ,设(f(z) = Az + B),经过透视除法之后结果变为下面的式子

[A + frac Bz ]

(n,f)代入上式,得

[A + frac Bn = -1 \ A + frac Bf = 1 \ ]

[left.egin{matrix} A + frac Bn = -1 \ A + frac Bf = 1 end{matrix} ight}Rightarrow B(frac1f-frac1n) = 2 Rightarrow B = frac{2nf}{n-f} ]

[left.egin{matrix} B = frac{2nf}{n-f} \ A + frac Bf = 1 end{matrix} ight}Rightarrow A = 1 - frac{2n}{n-f} = frac{-n-f}{n-f} ]

我们将((A-1))式中第三行替换成([0 ,0, A, B]), ((A-1))式变成

[egin{pmatrix} frac1{ar} &0 & 0 & 0\ 0 &1 & 0 & 0\ 0 &0 & 1 & 0\ 0 &0 & 0 & 1\ end{pmatrix}egin{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}egin{pmatrix} x\ y\ z\ 1\ end{pmatrix} =egin{pmatrix} frac {xcdot cot(frac{alpha}2)}{ar}\ ycdot cot(frac{alpha}2)\ Az+B\ z end{pmatrix}sim egin{pmatrix} frac {xcdot cot(frac{alpha}2)}{zcdot ar}\ frac{ycdot cot(frac{alpha}2)}z\ A+frac Bz\ 1 end{pmatrix} ag{A-2} ]

最终的变换矩阵如下:

[egin{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} ag{A-3} ]

在用投影矩阵乘上顶点坐标之后,顶点坐标被变换到我们所说的裁剪坐标系之下,在执行透视除法之后顶点坐标被变换到了 NDC 坐标系(NormalizedDeviceCoordinates)之下。

(alpha eq 0,n eq f)的情况下,((A-3))式矩阵可逆矩阵,其变换为线性变换,并且是同构变换。

原文地址:https://www.cnblogs.com/yaoyu126/p/14987125.html