2013-03-16 50 views
0

我有一個能夠在OpenGL上下文中解析和解釋OBJ文件格式的程序。如何使用粒子系統在帶有Blender的OBJ文件中導出頂點法線(vn)

我在Blender中創建了一個小項目,其中包含一個帶有「毛髮」粒子的簡單球體。

轉換後(從球體中分離出顆粒)我的顆粒形成一個新的網格。所以我在我的項目中有兩個網格(名爲'Sphere'和'Hair')。當我想在一個OBJ文件(File/export/Wavefront(.obj))中導出網格物體Sphere時,導出後選擇'include Normals',該文件包含所有關於法線的信息(例如:vn 0.5889 0.14501 0.45455, ...)。

當我嘗試用粒子做同樣的事情時,也選擇'包括法線',我沒有在OBJ文件中的法線。 (在出口之前,我選擇了正確的網格)。

所以,我不解決爲什麼法線屬性不能導出爲粒子網格的問題。

這裏是我的頭髮粒子的一般Blender渲染。正如你可以看到所有粒子都對光線有反應。所以Blender使用法線屬性來處理這些粒子。

enter image description here

而現在,上面顯示的圖像(在攪拌機「編輯模式」 - 轉換之後>),它被particules幾行形成。在我的opengl程序中,我使用GL_LINES渲染相同的粒子。我只想有法線信息來管理我的粒子上的光屬性。

enter image description here

你有一個想法如何導出爲particules網格法線屬性?

在此先感謝您的幫助。

+0

在這種情況下的粒子是由點描述的嗎?如果是這樣,爲什麼他們會有法線? – 2013-03-16 15:49:57

+0

可能相關的http://blenderartists.org/forum/archive/index.php/t-147629.html – 2013-03-16 15:51:12

+0

是的我已經看到這個頁面,我的頭髮粒子已經在OBJ文件中轉換,但沒有法線信息。我的微粒,由線條描述(頭髮由幾條小線組成)。所以我認爲可以擁有法線屬性(我相信一條線(GL_LINES)是一個小小的多邊形,OpenGL中的所有多邊形都應該具有法線屬性)。你如何看待我的觀點?謝謝 – user1364743 2013-03-16 16:01:01

回答

3

你正在嘗試給線條法線。讓我們來思考這意味着什麼。

當我們談到法線向量的表面上,我們的意思是「指出了表面的」

surface normals

對於三角形,當我們定義一側爲「前」面,有恰好一個正常。對於線條,垂直於線條的任何矢量都算作正常 - 有無限的,任何一個都會「做」。

我們關心圖形法線的一些原因是什麼?

  • 照明:例如通過使用法線與入射光矢量的點積近似漫反射照明。這不適用於頭髮!
  • 獲得一個變換矩陣:對於這一點,你可以任意選擇正常(你想變成頭髮空間?)

總之:你要麼可以選擇任何垂直向量爲你正常的(很容易計算這個)或者根本就不用法線。這取決於你想要做什麼。

+0

Tanks for this answer。正如你可以看到它上面Blender使用法線來顯示它的粒子,因爲當我移動我的模型時,所有的頭髮都會對光的屬性產生反應。因此,也許Blender導出腳本不包括粒子導出的法線屬性。此外,如果我在openGL程序中使用glLineWith(10.0)方法,您可以看到線條看起來像平面(所以線條是多邊形)。因此,在這種情況下,我會計算它們。但是,您是否已經使用Blender進行這種工作? – user1364743 2013-03-16 16:36:50

+1

要使頭髮變亮,您需要與您正在照明的線段和光線在同一平面上的法線。在幾乎所有情況下都有這樣的正常情況。然後你可以照常照亮。但是,這會根據您的頭髮位置,燈光位置等進行更改,因此您無法直接將其存儲在.obj中。 – 2013-03-16 16:39:37

+0

好吧,我要計算自己的法線。感謝您的回答。 – user1364743 2013-03-16 16:45:56