透視校正插值

2022-06-10 03:00:08 字數 956 閱讀 3653

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

假設螢幕空間的三角形的三個頂點分別為\(v_0,v_1,v_2\),\(v_p\)是位於三角形一邊上的點\(v_0 + t(v_1 - v_0)\)。

那麼有:

\[x_p = x_0 + t(x_1 - x_0)

\]其中,$ 0 \leq t \leq 1$。對於投影前的三角形,根據投影變換則有:

\[\dfrac = \dfrac

\]其中,\(x',z'\)為投影前三角形的座標,\(d\)為到投影平面的距離。代入可得:

\[\dfrac = \dfrac + t(\dfrac - \dfrac)

\]另外,我們已知\(v'_0,v'_1,v'_p\)三點共線,假設直線方程為\(ax'+bz'=c\),代入化簡可得到:

\[\dfrac = \dfrac + t(\dfrac - \dfrac)

\]可見,對於投影前在3d空間的三角形來說,\(z\)的倒數成線性插值。這樣,我們就可以根據螢幕空間三角形的頂點深度,插值計算出三角形內任意點的深度值。

同樣地,對於其他屬性\(m'\)例如顏色紋理等,它們都關於深度\(z'\)成線性關係,即都有\(am'+bz'=c\)。等式兩邊都除以\(cz'\)得到:

\[\dfrac + \dfrac = \dfrac

\]根據之前求得的結果,有:

\[\dfrac + \dfrac = \dfrac + \dfrac + t(\dfrac - \dfrac)

\]化簡得到:

\[\dfrac = \dfrac + t(\dfrac - \dfrac)

\]可見,對於投影前在3d空間的三角形來說,其他屬性乘以\(z\)的倒數成線性插值。這樣,我們就可以根據螢幕空間三角形的頂點屬性,插值計算出三角形內任意點的屬性值。

透視校正插值

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

透視校正插值 OpenGL

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

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

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