2

我是 OpenGL 的新手。我正在使用 JOGL 玩弄它。我正在使用这个模型

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

从 .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,还是两者?

4

2 回答 2

2

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

规范中,“引用顶点数据”部分:

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

每种类型的顶点都分别编号,从 1 开始。这意味着文件中的第一个几何顶点是 1,第二个是 2,依此类推。文件中的第一个纹理顶点是 1,第二个是 2,依此类推。编号在整个文件中按顺序继续。通常,文件有多个顶点数据列表。即使顶点数据被其他数据分开,这个编号顺序也会继续。

除了从文件中第一个列表的顶部向下计数顶点之外,您还可以从文件中元素的位置向后计数顶点。当你从一个元素开始计算列表时,参考数字是负数。参考编号 -1 表示元素正上方的顶点。参考编号 -2 表示上面有两个参考,依此类推

于 2010-09-17T20:26:34.550 回答
0

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

我努力使代码尽可能干净和简单。不幸的是,它是“老式的”,因为它使用固定功能管道而不是自定义着色器,但我希望它对基础知识有些有用和指导。您可以在以下位置找到它;

http://darksleep.com/oObjLoader/

于 2011-12-19T04:51:50.717 回答