Java 解析.obj文件:如何处理材质/纹理?

Java 解析.obj文件:如何处理材质/纹理?,java,opengl,graphics,jogl,.obj,Java,Opengl,Graphics,Jogl,.obj,我是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/46

我是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
语句之前的所有内容都应该使用
kaki\u light\u pave\u 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
,还是同时指向这两个顶点?

tl;dr:
vt
条目指定纹理坐标,
f
条目索引(基于1!)分为三个单独的数组(
v
vt
vn

从“引用顶点数据”部分:

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

每种类型的顶点都是 单独编号,从 1.这意味着文件中的第一个几何顶点为1,第二个为 2,等等。第一个纹理顶点 文件中的值为1,第二个值为2,并且 等等。编号继续 在整个过程中按顺序进行 文件通常,文件具有多个 顶点数据列表。这个编号 即使在顶点 数据由其他数据分隔

除了倒数顶点之外 从列表中第一个列表的顶部 文件中,还可以对顶点进行反向计数 从元素的位置向上移动列表 在文件中。当你数一数 从一个元素列表中,引用 数字是负数。推荐人 数字-1表示顶点 在元素的正上方。A. 参考编号-2表示两个 上面的参考文献等等


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

我努力使代码尽可能干净和简单。不幸的是,它是“老式”的,因为它使用固定的函数管道,而不是自定义着色器,但我希望它对基础知识有一定的帮助和指导意义。你可以在以下网址找到它:


好的,给定一组vt点和一幅图像,我需要调用什么来应用纹理?给定一行像
f1/2/3 4/5/6 7/8/9
,我怎么知道它索引到哪个顶点列表?每个对象只有一个顶点列表:所有
f
元素索引到其中。好的,但是你上面发布的说明每个顶点类型都是单独编号的?因此,如果它是F1/2,我如何知道它是指v[1]和v[2]还是指vt[1]和vt[2]?请阅读它正下方的规范部分,“参考顶点组”。第一个索引是顶点,第二个是纹理坐标,第三个是法线。