一旦在一個多邊形中找到了一個交點,就能夠執行許多其餘操做。若是多邊形被分配了顏色模式,則必須檢索交點處的顏色。相似的操做必須對其餘紋理映射過程執行,好比bump映射。若是多邊形是曲面上的一條路徑,則必須從頂點的不一樣法線推導出精確法線。算法
本節將介紹在凸四邊形中獲取點位置的算法,由於這種形狀在各類應用中常常使用。經過算法計算參數值(u,v)。這個座標對錶示點相對於四條邊的位置,做爲從0到1的座標軸對。問題如圖9所示。函數
注意,映射自己也能夠用做內外測試。若是點在四邊形以外,計算出的(u,v)對將落在(0…1,0…1)範圍以外。測試
從四邊形的平面上的一個交點開始。spa
用四個點來定義凸四邊形:blog
這些點定義u和v的軸,例如(P00,P10)定義了v=0時的u軸。平面的法線(不須要規範化)稱爲Pn。內存
推導過程是至關複雜的,所以不包含在本討論中。在[15]中有完整內容。插值必須計算許多因素。這些因素分爲兩類:點平面相關和平面相關。那些與平面有關的能夠(並且應該)提早計算並傳遞給算法,除非它們是其餘的限制因素,好比內存空間。這些平面相關的因素分別爲:效率
基本思想是爲u定義一個函數,描述垂直平面(由u和四邊形的座標軸定義)與座標系原點的距離:程序
(E2)中計算的因子用於表示這個平面相關方程。 給定ri,包含這一點的垂直平面的距離爲:im
設D(u) = Dr(u),解u,化簡:技術
這只是一個二次方程,它的解是直截了當的,所以不會被顯示出來。爲了得到更高的效率,一些其餘因素對於每個四邊形和存儲都值得一次計算。注意,只有當Du2!=0時才能夠計算這些值。這些因素是:
用(E2)和(E6)中的九個因子能夠計算出u的值。 該解決方案有兩種形式,取決於u軸是否平行。 經過如下條件肯定軸是否平行:
這兩個中最多隻有一個值位於範圍(0 ... 1)內,那是有用的值。 若是最終的u值不在(0..1)中,則該點在四邊形以外。 一個快速測試是測試Ka是否小於判別式(德爾塔)。 若是不是,則計算u0,不然爲u1。 而後檢查最終的u值,看它是否小於1.不是若是u0和u1都在有效範圍內,那麼四邊形不是凸的。
值v能夠用相似的方式計算。 (E2)的相應因子是:
(E7)至(E9)的相應方程式是經過用v代替u並用Nb代替Nc造成的。
依賴於點平面的過程自己所需的計算是按照u或v值,8個加法/減法,7個乘法,1個平方根和4個比較。
三角形逆映射
逆映射也能夠應用於三角形。 一種技術是將三角形傳遞給算法,將最後一個頂點加倍,以便爲例程提供四點支持。 例如,若是標準程序按照P00,P10,P11,P01的順序接受四邊形的點,則P01再次發送三角形的最後點P11。 在這種狀況下,(u,v)的映射將如圖10所示,u軸定義爲平行。
當要映射的點位於加倍的頂點時會發生特殊狀況。 在這個頂點,一個參數的全部值收斂。 在例子中,在圖10中的P11處,全部的u值都是正確的。 因爲這個奇點沒有正確的答案,咱們能夠選擇將其視爲多邊形以外的無效點,或者能夠將其指定爲任意值(零點多是候選)。 經過檢查方程(E8)中的除數是否等於零來測試這種特殊狀況。