2017-10-19 27 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); 
      });