跳转至

透视校正差值

在3D渲染中,输入数据是一些primitive信息,包括顶点位置、颜色、纹理坐标等等。在光栅化阶段,primitive(一般为三角形)被转化成一系列的fragment(或者称为像素),这些fragment接下来要做ps操作,此时每个fragment都有位置、颜色、纹理坐标这些属性信息,这些属性信息通过顶点属性用插值方法得到的。比如下面的primtive,输入数据中只有a,b,c三个顶点的信息,则三角形内部经过扫描转化得到的像素f的颜色则是通过插值得到,d是a、b的差值,e是a、c的差值,然后f又是d、e的插值。

20210422160200

推导

已知线段-的投影坐标线段为-,假定p3=(1-t)p1+tp2 (0<=t<=1),则p3是点在投影平面上的线性差值点的x分量,则有下面的推导公式:

可见,z的倒数是线性插值,所以我们可以用顶点的z值来插值求得primitive内部fragment的属性值,比如颜色等等。

几何推导


通过几何推导得出结论:假设EF=k*FG;则得出(1/h1 - 1/h2) = k( 1/h2 - 1/h3 );(可以将h理解为z,这里只是表面h的倒数呈现线性关系)

举例


假定的颜色为b1, 的颜色为把b2,则的颜色为b3为:

根据

可解得

可见用深度倒数来插值顶点属性是合适的。

转自:https://www.cnblogs.com/mikewolf2002/archive/2012/11/25/2787480.html
https://zhuanlan.zhihu.com/p/174802008