2015-11-08 112 views
0

當我在我的應用程序中使用法線貼圖,我得到的接縫這樣 enter image description here法線貼圖接縫接壤

我覺得有些不妥切線 我計算他們Rastertek.com

白衣這個功能
vector1[0] = vertex2.x - vertex1.x; 
vector1[1] = vertex2.y - vertex1.y; 
vector1[2] = vertex2.z - vertex1.z; 

vector2[0] = vertex3.x - vertex1.x; 
vector2[1] = vertex3.y - vertex1.y; 
vector2[2] = vertex3.z - vertex1.z; 

tuVector[0] = vertex2.tu - vertex1.tu; 
tvVector[0] = vertex2.tv - vertex1.tv; 

tuVector[1] = vertex3.tu - vertex1.tu; 
tvVector[1] = vertex3.tv - vertex1.tv; 

den = 1.0f/(tuVector[0] * tvVector[1] - tuVector[1] * tvVector[0]); 

tangent.x = (tvVector[1] * vector1[0] - tvVector[0] * vector2[0]) * den; 
tangent.y = (tvVector[1] * vector1[1] - tvVector[0] * vector2[1]) * den; 
tangent.z = (tvVector[1] * vector1[2] - tvVector[0] * vector2[2]) * den; 

binormal.x = (tuVector[0] * vector2[0] - tuVector[1] * vector1[0]) * den; 
binormal.y = (tuVector[0] * vector2[1] - tuVector[1] * vector1[1]) * den; 
binormal.z = (tuVector[0] * vector2[2] - tuVector[1] * vector1[2]) * den; 

我使用頂點法線但沒有差異,當我使用面法線我得到同樣的畫面

我怎樣才能解決這個問題

這是漫反射紋理渲染 enter image description here

+0

你有問題要問? –

+0

您是否有鏈接到Rastertek.com上您獲得代碼的頁面。 –

+0

我的第一個雖然是紋理貼圖不正確聯合。你可以製作一個模型,紋理貼圖只是作爲普通紋理和簡單的面/頂點法線應用到對象上。 –

回答

0

法線貼圖畫面的渲染輸出仔細觀察,它看起來像在右上角你有照明的反轉意義。在左下角看起來你在表面上有樹,右上角看起來像是指向外側。這可能表明問題與方向。

實際上,在漫反射貼圖中呈現的法線貼圖具有相同的邊界。在繼續之前,請確保「在漫反射紋理中呈現的法線貼圖」顯示無縫。

球體很棘手,因爲您無法在整個球體上定義非消失矢量場。 (Hairy ball theorem)這意味着你不能一致地定義整個球體上的切線和副法向量,必須有一些跳躍。這對你來說可能不是一個很大的問題,因爲普通的地圖是由各個部分組成的。有可能改變每個片段的矢量tutv的意義。因此,對於某些片段,其中一個或另一個被逆轉tu'=-tu,tv'=-tv,或者可能顛倒這兩者的順序。 tu'=tv, tv'=-tu。您將需要某種代碼方式來了解哪個補丁需要進行哪種轉換。

解決此問題的一個極端方法是從您的對象中刪除頂部和底部。這將允許您將對象視爲一個扭曲的圓柱體,它可以具有兩個矢量的一致定義。

也許更好的解決方案可能是將法線貼圖存儲爲三個分量,直接在每個點處給出3D法線。

假設我們不必擔心比其他90°旋轉,我們可以有方形

  1. 沒有變化TU = TU,TV'的對稱性=電視
  2. 反思TU = 0 TU '= - TU,TV'=電視
  3. 反映在TV = 0 TU '= TU,TV'= - 電視
  4. 旋轉90°TU '= - 電視,電視'= TU
  5. 旋轉-90°TU '= tv,tv'= - tu
  6. 旋轉180º TU = -tu,電視 '= - 電視
  7. 反映在TU = TV,TU'=電視,電視 '= TU
  8. 反映在TU = -TV,TU'= - 電視,電視'= - TU
+0

好,非常感謝。它僅適用於球面和torrus模型還是我桅杆計算所有我的模型? – harut9

+0

請你可以添加所有可能的tu,tv轉換 – harut9