天天看點

透視校正插值-OpenGL

在3D渲染中,輸入資料是一些primitive資訊,包括頂點位置、顔色、紋理坐标等等。在光栅化階段,primitive(一般為三角形)被轉化成一系列的fragment(或者稱為像素),這些fragment接下來要做ps操作,此時每個fragment都有位置、顔色、紋理坐标這些屬性資訊,這些屬性資訊通過頂點屬性用插值方法得到的。

透視校正插值-OpenGL

下圖是clip裁剪錐體的xz平面,從圖中可以看出,在投影平面的均勻插值(一系列藍色的标記),它們實際位置距離并不是均勻的,距離投影平面越遠,實際位置距離越長,是以這是我們采用線性插值的話,可能最終的結果并不是我們所想要的。

透視校正插值-OpenGL

已知線段<x1,z1>-<x2,z2>的投影坐标線段為<p1,-e>-<p2,-e>,假定p3=(1-t)p1+tp2 (0<=t<=1),則p3是點<p1,-e>和<p2,-e>在投影平面上的線性內插補點點的x分量,則有下面的推導公式:

透視校正插值-OpenGL
透視校正插值-OpenGL

可見,z的倒數是線性插值,是以我們可以用頂點的z值來插值求得primitive内部fragment的屬性值,比如顔色等等

假定<x1,z1>的顔色為b1, <x2,z2>的顔色為b2,則<x,z>的顔色b3為:

透視校正插值-OpenGL

這個就是透視校正後的插值。

繼續閱讀