许多着色方法都要用到顶点间的线性插值,譬如逐像素着色的Phong Shading往往需要进行纹理坐标等的线性插值。然而,透视投影会导致直接在屏幕空间进行线性插值得到的结果不正确,如下图:

透视投影后的线性插值校正

在屏幕上进行的线性插值并不对应在物体上的线性插值,这将导致一系列与该插值相关的着色结果出现错误。譬如,如果在屏幕上直接插值纹理坐标,会得到下图中右边的结果(左边为正确的结果):

透视投影后的线性插值校正

解决该问题的一种方式是利用透视投影后的线性插值校正在屏幕空间的线性性。假设坐标为透视投影后的线性插值校正透视投影后的线性插值校正的点分别被投影到屏幕上坐标为透视投影后的线性插值校正透视投影后的线性插值校正的位置,直线透视投影后的线性插值校正的方程为透视投影后的线性插值校正,如下图:

透视投影后的线性插值校正

若以透视投影后的线性插值校正为原点,易见有

透视投影后的线性插值校正

整理得

透视投影后的线性插值校正

透视投影后的线性插值校正代入方程透视投影后的线性插值校正并整理可得

透视投影后的线性插值校正

类似地,有以下方程成立:

透视投影后的线性插值校正

类似的式子对透视投影后的线性插值校正上的每一点及其投影点都成立。现考虑在透视投影后的线性插值校正透视投影后的线性插值校正间进行的线性插值透视投影后的线性插值校正,有:

透视投影后的线性插值校正

由此可知,在屏幕上进行的线性插值对应于在投影前空间中对透视投影后的线性插值校正的线性插值。现假设要在透视投影后的线性插值校正透视投影后的线性插值校正间对属性值透视投影后的线性插值校正透视投影后的线性插值校正进行线性插值得到透视投影后的线性插值校正,易知——

透视投影后的线性插值校正

整理得

透视投影后的线性插值校正

现在屏幕空间对透视投影后的线性插值校正进行线性插值,即

透视投影后的线性插值校正

将上式代入透视投影后的线性插值校正表达式得

透视投影后的线性插值校正

这就得到了正确的对透视投影后的线性插值校正插值的方法:在屏幕空间中对透视投影后的线性插值校正透视投影后的线性插值校正分别进行线性插值得到透视投影后的线性插值校正透视投影后的线性插值校正,然后用后者除以前者,即得到透视投影后的线性插值校正

以上推导仅考虑了透视投影后的线性插值校正透视投影后的线性插值校正坐标,现考虑三角形透视投影后的线性插值校正上进行的线性插值,假设屏幕上线性插值的权重为透视投影后的线性插值校正透视投影后的线性插值校正,真实三角形上对应的权重为透视投影后的线性插值校正透视投影后的线性插值校正,故有

透视投影后的线性插值校正

透视投影后的线性插值校正

透视投影后的线性插值校正

注意到透视投影后的线性插值校正透视投影后的线性插值校正,代入得到

透视投影后的线性插值校正

透视投影后的线性插值校正

透视投影后的线性插值校正

解得

透视投影后的线性插值校正

透视投影后的线性插值校正

这就得到了根据透视投影后的线性插值校正求出透视投影后的线性插值校正的公式。由于在透视投影变换后、坐标齐次化之前,透视投影后的线性插值校正透视投影后的线性插值校正的比值是一定的,因此上面两个公式中的透视投影后的线性插值校正坐标均可换成透视投影变换后、坐标齐次化之前对应的透视投影后的线性插值校正坐标。

相关文章: