2010-11-22 49 views
1

我有一個對象,我想應用照明。它在具有頂點座標的文本文件中描述。OpenGL:找到一個頂點的正常單一向量

予讀入了OpenGL OpenGL超級以下:

void m3dFindNormal(M3DVector3f vNormal, const M3DVector3f vP1, const M3DVector3f vP2, const M3DVector3f vP3); 

要使用此功能,它傳遞一個矢量 存儲正常,三個矢量 (各只是三個浮點數的數組) 從您的多邊形或三角形 (指定逆時針纏繞 的順序)。請注意,此返回的正常 矢量不一定是單位長度 (正常化)。

我明白,在我經過的頂點(順時針或逆時針)的順序決定了法向矢量的方向,所以我不知道我怎樣才能使與this format一個文件中的函數工作。

回答

2

嗯,這種格式看起來有點像OBJ-ish,但是有顏色,沒有法線和紋理座標。看起來這不是一個很好的選擇!但是,如果你真的想堅持下去......

我的建議沒有。 0是:

嚴重地使用其他格式。 :)頂點的原始二進制轉儲(位置+法線+紋理座標+顏色+無論),然後索引通常是最簡單的解決方案。如果你真的 *真的*想要使用.off ...

我的建議沒有。 1:

  • 將其導入到攪拌機(用Python編寫進口商腳本或使用其他工具來改變格式)
  • 有攪拌機計算法線你(它會做得很好!),
  • 將其導出爲任何帶有法線的格式。

如果你不想(或不能)做任何理由,還有如何自己生成法線忠告沒有2:

  • 每個面,計算它的臨時臉部正常(對於臉部A,B,C,它是(B-A)x(C-B))。不要將其重新縮放到長度= 1 - 面部的面積越大,產生的法向矢量的時間就越長,這就是我們想要的(現在)。
  • 對於每個頂點,求和觸及該向量的臉部的所有面部法線(這是每個臉部法線的非歸一來得方便的地方 - 您會得到某種「臉部區域」的「加權和」作爲重量)並且然後歸一化所得的矢量。這是您可以使用的每個頂點法線的很好的近似值。
+0

我不能用另一種格式,這個學校裏的功課。使用這種「加權總和」會帶來什麼好處? – andandandand 2010-11-22 17:40:54

0

嘗試一下,順序取決於創建.off文件的程序,格式描述似乎沒有定義正常的方向。我只是將它們出現在索引列表中的順序傳遞給函數。如果這不起作用,請以相反的順序傳遞它們。

相關問題