2012-08-02 2 views
0

OBJLoader가로드 된 후 모델 지오메트리의 경계 상자를 가져 오는 데 문제가 있습니다. 지금까지 나는 가지고있다 :ObjLoader three.js를 사용한 후 경계 상자를 계산하는 방법

var loader = new THREE.OBJLoader(); 
loader.load(mURL, function (object) { 

for (var i = 0, l = object.children.length; i < l; i ++) { 
    geometry = object.children[0].geometry;   
    bBox = geometry.computeBoundingBox(); 
    console.log("have a box of "+bBox); 
} 
//...rest of function 

그러나 bBox는 콘솔에 쓸 때 정의되지 않았다. 이 경우 지오메트리가 액세스 할 수있는 적절한 속성이 아닙니까?

답변

3

나는 이런 식으로 뭔가 트릭을 할해야한다고 생각 :

var loader = new THREE.OBJLoader(); 
loader.load(mURL, function (object) { 

    THREE.SceneUtils.traverseHierarchy(object, function (child) { 

     if (child instanceof THREE.Mesh) { 

      child.geometry.computeBoundingBox(); 

     } 

    } 

} 
+0

감사합니다. mrdoob. 그것은 나를 올바른 방향으로 이끌었습니다. 기하학에 도달하기 위해 obj 내에서 좀 더 파고 들었다. 내 대답은 새로운 대답을 확인하십시오. – shadyhill

+0

! 답변을 업데이트했습니다. – mrdoob

+0

예, 내 루프보다 효율적입니다. 다시 한 번 감사드립니다! – shadyhill

0

mrdoob의 이송 기능을 바탕으로, 나는 다음과 경계 상자를 얻을 수있었습니다 : mrdoob의 대답 @

var loader = new THREE.OBJLoader(); 
loader.load(mURL, function (object) { 
    THREE.SceneUtils.traverseHierarchy(object, function(child){ 
    if(child instanceof THREE.Mesh){ 
     for (var i in child) { 
      if(i == "geometry"){ 
       var geo = child[i]; 
        geo.computeBoundingBox(); 
        var bBox = geo.boundingBox; 
       } 
      } 
     } 
     }); 
     ///rest of loading function here 
}); 
0

정확하지만 때문에 (R52 기준) three.js를 API 변경으로, 이제 다음과 같아야합니다

var loader = new THREE.OBJLoader(); 
loader.load(mURL, function (object) { 
    object.traverse(function (child) { 
     if (child instanceof THREE.Mesh) { 
      child.geometry.computeBoundingBox(); 
     } 
    }); 
}; 
2

이 대답은 이제 예를 들어 X를 얻을 수 object.bBox.max.x을 입력하여 메쉬의 크기에 액세스 할 수 있습니다

var loader = new THREE.OBJLoader(); 
loader.load(mURL, function (object) { 
object.traverse(function (child) { 
    if (child instanceof THREE.Mesh) { 
     child.geometry.computeBoundingBox(); 
     object.bBox = child.geometry.boundingBox;//<-- Actually get the variable 
    } 
}); 
}; 

three.js를

의 최신 버전의 마지막을 결합한 제품입니다.

관련 문제