Java 解析.obj文件:如何处理材质/纹理?
我是OpenGL新手。我正在用JOGL玩它。我在用这个 我正在成功地将其渲染到窗口。但是,我希望应用纹理/材质。我不完全确定怎么做 从.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
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]?请阅读它正下方的规范部分,“参考顶点组”。第一个索引是顶点,第二个是纹理坐标,第三个是法线。