2017-10-19 1 views
0

objectloader가로드 된 장면에서 Subdivision 수정자를 사용자에게 보내려고합니다.ThreeJS, Objectloader 기반 장면에 Subdivision 수정 자 추가

이 시도 할 때 나는 다음과 같은 자바 스크립트 오류가 발생하고있다 "BufferSubdivisionModifier.js을 : (514) catch되지 않은 형식 오류 : 정의되지 않은 재산 '배열'을 읽을 수 없습니다"

내 코드가 세분화 수정 자와 오브젝트를로드 할 다음과 같다 . 내가 추측이 있다면

  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); 
      });