計算三角形網格的tangent space

2021-06-07 07:58:29 字數 1880 閱讀 1886

**:

點的內容看的還不是太清楚-_-b。另外,目前的演算法還不能完美處理映象或者在紋理不連續處可能出現的

問題,就算在farcry中,很多問題也是通過美工來「隱藏」的,再一次應證了之前對美工重要性的結論^^。

演算法:

tangent space

在bump map中有著重要作用,通常需要把燈光轉換到tangent space進行計算。對由引數方程計算出的規則曲面(比如,球體,圓環)來說,很容易通過方程計算出tangent space,但對任意的三角形網格來說,則沒有那麼簡單。

tangent space是乙個三維空間。對3d空間中的乙個頂點來說,切空間的三條座標軸分別對應該點的法線n,切線t,和副法線(binormal)b,顯然,對不同的頂點來說,切空間是不同的。那麼在已知三角形三個頂點及其紋理座標的時候,如何計算出ntb呢?

目前已知的資料有三角形的三個頂點在世界座標中的位置: p0, p1,p2, 以及相應的紋理座標在紋理空間中的位置c0 (u0,v0),c1,c2,則有:

p10= p1 – p0,

p­20 = p2 - p1 ,

c10 = c1 – c0 = (u1-u0, v1-v0) = ( u10 ,v10)

c20 = c2 – c0.= (u2-u0, v2-v0) = ( u20 ,v20)

注意,p10在世界座標中的方向和c10在紋理空間中的方向是一致的(這一點確實比較抽象,偶畫圖研究了好久才弄明白-_-),同樣,p­20c20也是如此,發現這一點很重要,可以說是整個計算的基石。進一步來說,tb分別和紋理座標軸uv是平行的。因此我們有:

p10 =u10t+ v10b

p­20 = u20t+ v20b

把向量展開得到:

兩邊乘以[c10c20]的逆矩陣,最後得到

法線n=txb

這樣我們就得到了座標從切空間轉變到世界座標下的變換矩陣m = [t b n],當然,更加常用的是m的逆矩陣。注意,這裡計算得出的只是面法線,如果需要計算每個頂點的法線,則應該對共享該頂點的多個面的法線取均值,求出結果。

實現:

ogre calculate tangent:

vector3 math::calculatetangentspacevector(

const vector3& position1, const vector3& position2, const vector3& position3,

real u1, real v1, real u2, real v2, real u3, real v3)

return tangent;

}

計算三角形面積

計算三角形面積 總時間限制 1000ms 記憶體限制 65536kb 描述平面上有乙個三角形,它的三個頂點座標分別為 x1,y1 x2,y2 x3,y3 那麼請問這個三角形的面積是多少。輸入輸入僅一行,包括6個單精度浮點數,分別對應x1,y1,x2,y2,x3,y3。輸出輸出也是一行,輸出三角形的面...

三角形面積計算

類宣告私有的底邊長base和高height,同時在構造器中,從鍵盤獲取這些資料,並提供公共的方法可以獲取這些資料 在 test類中計算三角形的面積 類 public class private void setbase private void setheight public int getbas...

計算三角形的面積

1616 3 張宇 16.10.18 連續十七天總結 a.三角形的面積公式 100 b.今天遲交總結了,組織有懲罰我接受。平時都是早上寫的,誰知今天是走路去的回來都1點了。以後會提前寫的。今天的學習基本都懂,只是公式中的s等於 a b c 2,其他都可以。include include using ...