2017-10-19 31 views
0

我正在尝试在Objectloader加载的场景上使用Subdivision Modifier。ThreeJS,将Subdivision Modifier添加到基于Objectloader的场景

:在尝试此,当我得到了以下JavaScript错误“BufferSubdivisionModifier.js:514遗漏的类型错误:无法读取属性未定义‘数组’”

我的代码是在与细分修改器加载对象。

  var loader = new THREE.ObjectLoader(); 
      loader.load("../js/brain2.json", function(object) { 
        var material = new THREE.MeshPhongMaterial({ color: 0x888888, specular: 0x222222, shininess: 20}); 

        object.traverse(function (child) { 
         if (child instanceof THREE.Mesh) { 
          var modifier = new THREE.BufferSubdivisionModifier(1); 
          child.material = material; 
          child.geometry.computeFaceNormals(); 
          modifier.modify(child.geometry); 
          child.material.overdraw = 1 
         }; 
        }); 
        object.scale.set(15, 15, 15); 
        object.position.x = 1; 
        object.position.y = 1; 
        object.position.z = 1; 
        object.rotation.set(1, 1, 1); 
        scene.add(object); 
      }); 

如果我不得不猜测,那就是细分修饰符不喜欢'child.geometry'对象吗?

回答

0

解决方案是加载孩子的几何图形。

  var loader = new THREE.ObjectLoader(); 
      loader.load("../js/brain2.json", function(object) { 
        var material = new THREE.MeshPhongMaterial({ color: 0x888888, specular: 0x222222, shininess: 20}); 

        object.traverse(function (child) { 
         if (child instanceof THREE.Mesh) { 
          child.material = material; 
          var geometry = new THREE.Geometry().fromBufferGeometry(child.geometry); 
          geometry.computeFaceNormals(); 
          geometry.mergeVertices(); 
          geometry.computeVertexNormals(); 
          child.geometry = new THREE.BufferGeometry().fromGeometry(geometry); 
          var modifier = new THREE.BufferSubdivisionModifier(1); 
          modifier.modify(geometry); 
          child.material.overdraw = 1 
         }; 
        }); 
        object.scale.set(15, 15, 15); 
        object.position.x = 1; 
        object.position.y = 1; 
        object.position.z = 1; 
        object.rotation.set(5, 1, 1); 
        scene.add(object); 
      });