1

モデルがOBJLoaderでロードされた後、モデルのジオメトリのバウンディングボックスを取得しようとすると問題が発生します。これまでのところ:

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は未定義です。この場合、ジオメトリはアクセスするのに適切なプロパティではありませんか?

4

4 に答える 4

4

私はこのような何かがトリックをするべきだと思います:

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

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

        if ( child instanceof THREE.Mesh ) {

            child.geometry.computeBoundingBox();

        }

    }

}
于 2012-08-03T01:40:56.800 に答える
3

この回答は、THREE.jsの最新バージョンの最後のものを組み合わせたものです

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

これで、object.bBox.max.xと入力してメッシュの寸法にアクセスし、たとえばxを取得できます。

于 2014-02-20T20:22:24.997 に答える
0

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
 });
于 2012-08-03T03:51:52.563 に答える
0

@mrdoobの答えは正しかったが、three.js APIの変更(r52以降)により、次のようになります。

var loader = new THREE.OBJLoader();
loader.load( mURL, function ( object ) {
    object.traverse(function ( child ) {
        if ( child instanceof THREE.Mesh ) {
            child.geometry.computeBoundingBox();
        }
    });
};
于 2013-06-27T21:19:44.150 に答える