【发布时间】:2015-01-17 16:53:33
【问题描述】:
所以我在搅拌机中创建了一个 3D 模型,将其导出为 obj 并将其导入 C++/OpenGL。该模型完美加载,尽管它失去了所有的颜色和纹理。它只是一个基本的白色模型.. 有什么办法可以解决这个问题,或者您不能将模型与您必须在 OpenGl 中重做的纹理一起导入?
【问题讨论】:
-
您是否使用库来加载
obj?
所以我在搅拌机中创建了一个 3D 模型,将其导出为 obj 并将其导入 C++/OpenGL。该模型完美加载,尽管它失去了所有的颜色和纹理。它只是一个基本的白色模型.. 有什么办法可以解决这个问题,或者您不能将模型与您必须在 OpenGl 中重做的纹理一起导入?
【问题讨论】:
obj?
.obj 文件不包含纹理本身:仅包含每个顶点的纹理坐标。
您需要自己加载和绑定纹理,而不是从 obj 文件加载。
其他文件格式可以嵌入纹理,但从文件加载模型不在 openGL API 的范围内。
【讨论】:
obj 文件确实不包含纹理或材质数据,但它们通常与mtl 文件配对。 obj 引用 mtl 文件以与 mtllib 指令一起使用,并为带有 usemtl 的后续面选择材料。
见:http://en.wikipedia.org/wiki/Wavefront_.obj_file#Material_template_library
然而,mtl 文件只包含颜色和纹理文件名,而不是实际的纹理数据。您必须单独研究加载纹理并使用它来加载mtl 文件中引用的纹理。然后创建 OpenGL 纹理并绘制绑定的对象,以及 obj 文件中的纹理坐标。
在搅拌机中,确保在导出obj 时选中Write Materials。还要检查纹理的相对路径是否合适(只需在文本编辑器中打开mtl 文件)。附带说明一下,Include Normals 令人讨厌的是默认情况下未选中。
所以,您的obj 文件包含:
mtl 文件包含:
png、jpg,等等。【讨论】: