如果将一个不平行于xy平面的三角形透视投影到xy平面,然后做插值,计算出各像素点的属性后得到的图像存在透视扭曲的现象。
![](https://img.haomeiwen.com/i1293315/5915f1cca6708330.png)
左图,原纹理;中图,透视扭曲;右图,透视矫正后的结果
产生透视扭曲的原因,见下图:
![](https://img.haomeiwen.com/i1293315/6768532ee7852e8e.png)
直接在屏幕空间对属性做线性插值可能存在透视扭曲现象
为了便于说明,上图只展示了2D空间的一条线投影到1D的平面的情况。3D投影到2D平面与此类似,可以把上图当做三角形的一条扫描线的投影情况看待。
2D空间的直线段的两个端点分别投影到1D屏幕的
和
。
顶点的属性记为,则在
点:
,在
点:
。
由于和
分别由
和
投影而来,自然的,
是
的中点。
如果我们在屏幕空间做线性插值,那么点的
。
而是
投影而来,从图中可以明显看到
并不是
的中点。也就是说:
此时,便产生了透视扭曲的现象。
![](https://img.haomeiwen.com/i1293315/2e28bf5b6dd4a7f1.png)
根据上图并利用相似三角形的性质可以推导出(推导过程参看这里):
通过上式可知,屏幕上的点的
值可以通过线性插值
和
得到。这是一个非常重要的性质。
基于前面的推导过程中的的值,代入
,可以得到
的属性
:
通过上式可知,屏幕上的点的属性可以通过线性插值
和
之后再乘以
得到。
网友评论