【问题标题】:SceneImporter not loading MeshFaceMaterial textures in r68SceneImporter 未在 r68 中加载 MeshFaceMaterial 纹理
【发布时间】:2014-12-26 02:08:16
【问题描述】:

我有一个使用 Three.js 导出器从 Blender 导出的场景。经过一番试验和错误,我把它出口得很好。当我尝试将其导入到 Three 时,我收到了一些 WebGL 错误,例如 glDrawElements: range out of bounds for buffer,这似乎与导入对象的大小或位置有关。我乱搞了一些与大小有关的东西,最终让它加载得很好。但是,我的所有带有纹理的材质都没有加载,除了一个,它是一个应用了单一材质的对象。

这是我的管道

  • 在我的三个 js 编辑器工具中为关卡创建基础
  • 导出并将其导入 Blender 以进行纹理/UV 映射(工作正常)
  • 对象可以有多种材质,实际上每个面都有一个材质,每种材质都可以映射到不同的纹理(一切都很好,对象是 uv 展开的等等)
  • 将所有对象连接在一起(除了一个对象,它是一棵应用了单一材质/纹理的树)
  • 通过 Three.js 导出器将 Blender 文件导出为 JSON 文件
  • 使用 SceneImporter 将文件加载到三个中

当涉及到三个时,有两个对象,一个是树,它有一个单一的纹理映射到它的材质。另一个是带有 20 种材质和纹理的大型几何体。此几何图形没有显示任何纹理,仅显示为 MeshLambertMaterial。

有没有其他人遇到过类似的问题?有什么解决办法吗?

【问题讨论】:

    标签: three.js blender texture-mapping


    【解决方案1】:

    SceneImporter 似乎不知道如何处理这些材料,但所有数据都在那里,所以您需要给它一点帮助。

    像这样;

    loader.load('sceneWithObjectOfManyFaceMaterials.json' , function(loaded)
    {
        for(var key in loaded.objects) 
        { 
            var mesh = loaded.objects[key]; 
    
            if(mesh.material.materials)
            {
                mesh.material.materials.forEach(function(m , i)
                {
                    m.map = loaded.materials[m.name].map;
                });
            }
    
            scene.add(mesh);
        }
    
        render();
    });
    

    【讨论】:

      猜你喜欢
      • 2014-10-25
      • 2015-05-30
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-27
      • 1970-01-01
      • 2021-08-31
      • 2012-09-15
      相关资源
      最近更新 更多