解析.obj文件:如何做材料/纹理?

时间:2010-09-17 18:49:11

标签: java opengl graphics jogl .obj

我是OpenGL的新手。我正在使用JOGL来玩它。我正在使用此model

我成功将其渲染到窗口。但是,我想应用纹理/材料。我不完全确定如何做到这一点。

来自.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 个答案:

答案 0 :(得分:2)

tl; dr:vt条目将纹理坐标和f条目索引(从1开始!)指定为三个单独的数组(vvtvn)。

spec,“引用顶点数据”部分:

  

对于所有元素,参考编号   用于识别几何   顶点,纹理顶点,顶点   法线和参数空间顶点。

     

这些类型的顶点中的每一个都是   单独编号,从。开始   这意味着文件中的第一个几何顶点是1,第二个是   2,依此类推。第一个纹理顶点   在文件中是1,第二个是2,和   等等。编号继续   顺序贯穿整个   文件。文件经常有多个   顶点数据列表。这个编号   即使在顶点时序列也会继续   数据由其他数据分隔。

     

除了计算顶点之外   从第一个列表的顶部   文件,你也可以计算顶点   从元素的位置向上列出   在文件中。当你数出来的时候   从元素列表,引用   数字是负数。一个参考   数字-1表示顶点   紧靠元素上方。一个   参考编号-2表示两个   以上参考等等

答案 1 :(得分:0)

我写了一个OBJ文件加载器和一个样本模型查看器,用LWJGL显示模型,类似于JOGL但不完全相同。 (我使用过JOGL和LWJGL - 实际上我最近从JOGL切换到了LWJGL。)

我努力使代码尽可能简洁明了。不幸的是,它是“老式的”,因为它使用固定功能管道而不是自定义着色器,但我希望它对基础知识有点有用和有益。你可以在;

找到它

http://darksleep.com/oObjLoader/