所以我在blender中创建了一个3D模型,将其导出为obj并将其导入到C ++ / OpenGL中。尽管模型的色彩和纹理都丢失了,但模型仍能完美地加载。它只是一个基本的白色模型..有没有办法解决这个问题,或者你不能用你需要在OpenGl中重做它们的纹理导入模型吗?
答案 0 :(得分:4)
.obj文件不包含纹理本身:每个顶点只有纹理坐标。
你需要自己加载和绑定纹理,而不是从obj文件加载。
其他文件格式可以嵌入纹理,但是从文件加载模型不在openGL API的范围内。
答案 1 :(得分:1)
obj
个文件不包含纹理或素材数据,但它们通常与mtl
个文件配对。 obj
引用mtl
文件以与mtllib
指令一起使用,并为usemtl
的后续面选择材料。
请参阅:http://en.wikipedia.org/wiki/Wavefront_.obj_file#Material_template_library
但是,mtl文件只包含颜色和纹理文件名,而不包含实际的纹理数据。您必须分别研究加载纹理并使用它来加载mtl
文件中引用的纹理。然后创建OpenGL纹理并绘制绑定对象,以及obj
文件中的纹理坐标。
在blender中,确保在导出Write Materials
时选中obj
。还要检查纹理的相对路径是否合适(只需在文本编辑器中打开mtl
文件)。作为旁注,Include Normals
在默认情况下是未经检查的。
因此,您的obj
文件包含:
mtl
文件包含:
png
,jpg
,无论如何。