透視校正插值 OpenGL

2021-08-30 21:35:22 字數 711 閱讀 8237

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

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

已知線段-的投影座標線段為-,假定p3=(1-t)p1+tp2 (0<=t<=1),則p3是點和在投影平面上的線性差值點的x分量,則有下面的推導公式:

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

假定的顏色為b1, 的顏色為b2,則的顏色b3為:

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

透視校正插值

當圖形處理器在螢幕上顯示乙個三角形時,是需要進行逐行的光柵化。三角形頂點除了含有位置資訊外,還包含顏色 紋理等屬性資訊,當然這類資訊也需要進行插值。由於投影平面上的相同步長隨著三角形面與相機距離的增加而在三角形面上產生更大的步長。圖形處理需要採用非線性插值方式來計算相關屬性資訊才能獲得正確的結果。如...

透視校正插值

在投影變換視口變換後,需要對投影到螢幕上的平面三角形頂點屬性進行線性插值,例如顏色,紋理,深度等。但對於投影前在3d空間的三角形來說,這個插值並不是線性的。下面來推導一下這個插值。假設螢幕空間的三角形的三個頂點分別為 v 0,v 1,v 2 v p 是位於三角形一邊上的點 v 0 t v 1 v 0...

深度插值與透視紋理對映插值

在模型空間,世界空間,相機空間和剪裁空間中三角面上的紋理座標與空間座標是線性關係,按空間座標進行線性插值即可求得紋理座標。但在透視投影模式下在歸一化裝置空間和視口空間中紋理座標與空間座標就不再是線性關係了,要在歸一化裝置空間或視口空間插值計算紋理座標,需要進行非線性插值。其原因就在於透視投影模式下由...