光栅化07-透视矫正

2021-04-01  本文已影响0人  陈成_Adam

如果将一个不平行于xy平面的三角形透视投影到xy平面,然后做插值,计算出各像素点的属性后得到的图像存在透视扭曲的现象。

左图,原纹理;中图,透视扭曲;右图,透视矫正后的结果

产生透视扭曲的原因,见下图:

直接在屏幕空间对属性做线性插值可能存在透视扭曲现象

为了便于说明,上图只展示了2D空间的一条线投影到1D的平面的情况。3D投影到2D平面与此类似,可以把上图当做三角形的一条扫描线的投影情况看待。

2D空间的直线段\overline{AB}的两个端点分别投影到1D屏幕的ab

顶点的属性记为intensity,则在A点:intensity=0.0,在B点:intensity=1.0

由于ab分别由AB投影而来,自然的,

a.intensity=A.intensity=0.0且 b.intensity=B.intensity=1.0

c\overline{ab}的中点。

如果我们在屏幕空间做线性插值,那么c点的intensity=0.5

cC投影而来,从图中可以明显看到C并不是\overline{AB}的中点。也就是说:

c.intensity=0.5,C.intensity≠0.5 \Rightarrow c.intensity≠C.intensity

此时,便产生了透视扭曲的现象。

根据上图并利用相似三角形的性质可以推导出(推导过程参看这里):

\frac{1}{Z_t}=\frac{1}{Z_1}+s(\frac{1}{Z_2}-\frac{1}{Z_1})

通过上式可知,屏幕上的点cz值可以通过线性插值\frac{1}{Z_1}\frac{1}{Z_2}得到。这是一个非常重要的性质。

基于前面的推导过程中的t的值,代入I_t=I_1+t(I_2-I_1),可以得到C的属性I_t

\frac{I_t}{Z_t}=\frac{I_1}{Z_1}+s(\frac{I_2}{Z_2}-\frac{I_1}{Z_1})

通过上式可知,屏幕上的点c的属性可以通过线性插值\frac{I_1}{Z_1}\frac{I_2}{Z_2}之后再乘以Z_t得到。

上一篇 下一篇

猜你喜欢

热点阅读