解析 .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/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
还是两者都有?
I'm new to OpenGL. I'm playing around with it using JOGL. I'm using this model.
I am successfully rendering it to the window. However, I would like to apply textures/materials. I'm not entirely sure how to do this.
From the .obj file:
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
Wikipedia tells me that everything after the usemtl
statement and before the next usemtl
statement is supposed to use khaki_light_pave_W.png
. However, I'm not sure how do this in OpenGL.
There are a bunch of vertices defined at the top of the file:
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
Do I need to use the vt
vertices for the texture? The f
statements include indices. Are these indicies into the v
vertices, vt
, or both?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
tl;dr:
vt
条目指定纹理坐标,f
条目索引(从 1 开始!)到三个单独的数组(v
、<代码>vt和vn
)。来自 规范,“引用顶点数据”部分:
tl;dr: The
vt
entries specify texture coordinates and thef
entries index (1-based!) into three separate arrays (v
,vt
, andvn
).From the spec, section "Referencing vertex data":
我编写了一个 OBJ 文件加载器和一个示例模型查看器,以使用 LWJGL 显示模型,这与 JOGL 类似,但不完全相同。 (我使用过 JOGL 和 LWJGL - 事实上我最近从 JOGL 切换到 LWJGL。)
我努力使代码尽可能干净和简单。不幸的是,它是“老式的”,因为它使用固定功能管道而不是自定义着色器,但我希望它对基础知识可能有点有用和指导意义。您可以在以下位置找到它:
http://darksleep.com/oObjLoader/
I wrote up an OBJ file loader along with a sample model viewer to display the model using LWJGL, which is similar to JOGL but not exactly the same. (I've used both JOGL and LWJGL - in fact I recently switched from JOGL to LWJGL.)
I strove to make the code as clean and simple as possible. Unfortunately it is "old fashioned" in that it uses the Fixed Function Pipeline rather than custom shaders, but I hope it may be somewhat useful and instructive for the basics. You can find it at;
http://darksleep.com/oObjLoader/