创建了Blender Obj但是在OpenGL中它失去了它的纹理?

时间:2014-11-19 23:48:05

标签: c++ opengl blender

所以我在blender中创建了一个3D模型,将其导出为obj并将其导入到C ++ / OpenGL中。尽管模型的色彩和纹理都丢失了,但模型仍能完美地加载。它只是一个基本的白色模型..有没有办法解决这个问题,或者你不能用你需要在OpenGl中重做它们的纹理导入模型吗?

2 个答案:

答案 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文件包含:

  • 顶点位置,也可能是法线和纹理坐标。
  • 顶点连接或,实际上可能是n-gons,您需要进行三角测量。
  • 参考材料文件(如果有)。

mtl文件包含:

  • 许多材料定义
  • 每个都用名称
  • 标识
  • 包含环境,漫反射,高光等颜色。
  • 还包含纹理贴图引用(文件名),可以是pngjpg,无论如何。