2010-09-17 49 views
2

我是OpenGL的新手。我正在使用JOGL玩弄它。我正在使用model解析.obj文件:如何製作材質/紋理?

我成功地將它渲染到窗口。不過,我想申請紋理/材質。我不完全確定如何做到這一點。

從obj文件:

f 6307/4525/3 6303/4524/3 6327/4523/3 6315/4526/3 
usemtl kahki_light_pave_W.png 
f 6445/3470/305 6437/4623/305 6593/4624/305 6597/4625/305 
f 6594/4626/306 6438/4627/306 6446/4628/306 6598/4629/306 
f 6595/4630/307 6439/4631/307 6447/4632/307 6599/4633/307 
f 6448/3482/308 6440/4634/308 6596/4635/308 6600/4636/308 

維基百科告訴我,usemtl語句之後,下一個usemtl語句之前,一切都應該使用khaki_light_pave_W.png。但是,我不確定在OpenGL中如何做到這一點。

有在文件的頂部定義了一堆頂點:

v 19.886690 3.093822 -21.149584 
v 23.886690 3.093822 -21.149584 
vt 0.918121 0.920883 
vt 0.918121 0.959193 
vt -0.537323 1.541370 
vt -0.537323 1.503060 
vt 0.462677 0.503060 

我需要使用vt頂點紋理? f聲明包含索引。這些標記是v頂點,vt還是兩者?

回答

2

TL; DR:該vt條目指定紋理座標和f條目索引爲三個獨立的陣列(vvt,並vn)(1爲本!)。

spec,部分「引用頂點數據」:

對於所有的元件,參考數字 用於識別幾何 頂點,紋理頂點,頂點 法線,參數空間的頂點。

每個這些類型的頂點的是 單獨編號,與 1開始這意味着該文件中的第一幾何頂點爲1,第二個是 2,依此類推。文件中的第一個紋理頂點 是1,第二個是2和 等。編號在整個 文件中依次繼續 。通常,文件具有多個頂點數據的列表 。即使頂點 數據被其他數據分隔,此編號 序列仍會繼續。

除了從 文件中的第一個列表的頂部計數頂點向下 ,您也可以從文件中的一個元素的位置 算頂點回 該名單。當您計算來自元素的 列表時,參考 數字爲負數。參考 -1的數字表示緊靠元素上方的頂點 。的-2 A 參考數字表示上面等等

+0

好了,給定一組的VT點和圖像,我需要應用紋理什麼OpenGL的電話?給定一個'f 1/2/3 4/5/6 7/8/9'這樣的行,我怎麼知道它正在索引的頂點列表? – 2010-09-17 21:27:31

+0

每個OBJ只有一個頂點列表:所有的'f'元素索引到它。 – genpfault 2010-09-17 22:13:51

+0

好的,但你上面發佈的內容說每個頂點類型都是分別編號的?所以如果它說f 1/2,我怎麼知道它是指v [1]和v [2]還是vt [1]和vt [2]? – 2010-09-18 01:14:26

0

我寫了一個OBJ文件加載器帶有示例模型觀看者沿着顯示使用LWJGL模型,該模型是類似於JOGL但不完全兩個 引用相同。 (我已經使用了JOGL和LWJGL - 事實上我最近從JOGL切換到LWJGL。)

我努力使代碼儘可能乾淨和簡單。不幸的是,它使用固定功能流水線而不是自定義着色器是「老式的」,但我希望它對於基礎知識可能有點用處和啓發性。你可以在;

http://darksleep.com/oObjLoader/