【问题标题】:Created Blender Obj but in OpenGL it loses it's texture?创建了 Blender Obj 但在 OpenGL 中它失去了它的纹理?
【发布时间】:2015-01-17 16:53:33
【问题描述】:

所以我在搅拌机中创建了一个 3D 模型,将其导出为 obj 并将其导入 C++/OpenGL。该模型完美加载,尽管它失去了所有的颜色和纹理。它只是一个基本的白色模型.. 有什么办法可以解决这个问题,或者您不能将模型与您必须在 OpenGl 中重做的纹理一起导入?

【问题讨论】:

  • 您是否使用库来加载obj

标签: c++ opengl blender


【解决方案1】:

.obj 文件不包含纹理本身:仅包含每个顶点的纹理坐标。

您需要自己加载和绑定纹理,而不是从 obj 文件加载。

其他文件格式可以嵌入纹理,但从文件加载模型不在 openGL API 的范围内。

【讨论】:

    【解决方案2】:

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

    • 顶点位置以及可能的法线和纹理坐标。
    • 顶点连通性或,实际上可能是 n 边形,您需要进行三角测量。
    • 对材料文件的引用(如果有)。

    mtl 文件包含:

    • 许多材料定义
    • 每个都由一个名称标识
    • 包含环境、漫反射、镜面反射等颜色。
    • 还包含纹理贴图引用(文件名),可以是pngjpg,等等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 2012-06-16
      • 1970-01-01
      相关资源
      最近更新 更多