SceneImporter没有在r68中加载MeshFaceMaterial纹理

时间:2014-10-30 06:06:22

标签: three.js blender texture-mapping

我有一个场景,我使用Three.js导出器从Blender导出。经过一些试验和错误,我得到它出口罚款。当我尝试将其导入Three时,我遇到了一些像glDrawElements: range out of bounds for buffer这样的WebGL错误,这些错误似乎与导入对象的大小或位置有关。我把一些与尺寸相关的东西弄得乱七八糟,最终得到了很好的装载。但是,没有任何带有纹理的材质正在加载,除了一个,这是一个应用了单一材质的对象。

这是我的管道

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

当涉及到Three时,有两个对象,一个是具有映射到其材质的单个纹理的树。另一种是大型几何体,其中有20种材质和纹理映射。此几何体没有任何纹理显示,只显示为MeshLambertMaterial。

还有其他人遇到过这样的问题吗?任何解决方案?

1 个答案:

答案 0 :(得分:2)

看起来像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();
});