Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ObjLoader three.js后如何计算边界框_Javascript_Three.js - Fatal编程技术网

Javascript 使用ObjLoader three.js后如何计算边界框

Javascript 使用ObjLoader three.js后如何计算边界框,javascript,three.js,Javascript,Three.js,在使用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;

在使用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
var loader=new THREE.OBJLoader();
loader.load(mURL,函数(对象){
for(var i=0,l=object.children.length;i

但是当我将bBox写入控制台时,它是未定义的。几何体不是在这种情况下访问的正确属性吗?

我认为类似这样的东西应该起到作用:

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

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

        if ( child instanceof THREE.Mesh ) {

            child.geometry.computeBoundingBox();

        }

    }

}

我认为像这样的事情应该会起作用:

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

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

        if ( child instanceof THREE.Mesh ) {

            child.geometry.computeBoundingBox();

        }

    }

}

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

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

@mrdoob的回答是正确的,但是由于三个.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();
        }
    });
};

@mrdoob的回答是正确的,但是由于三个.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();
        }
    });
};

这个答案结合了最新版本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
    }
});
};
var loader=new THREE.OBJLoader();
loader.load(mURL,函数(对象){
遍历(函数(子对象){
if(三个.Mesh的子实例){
child.geometry.computeBoundingBox();

object.bBox=child.geometry.boundingBox;//此答案结合了最新版本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
    }
});
};
var loader=new THREE.OBJLoader();
loader.load(mURL,函数(对象){
遍历(函数(子对象){
if(三个.Mesh的子实例){
child.geometry.computeBoundingBox();

object.bBox=child.geometry.boundingBox;//谢谢mrdoob。这让我朝着正确的方向前进。我必须在obj中进行更多的挖掘才能获得几何体。查看我的答案新答案。是的,这比我的循环更有效。再次感谢!谢谢mrdoob。这让我朝着正确的方向前进。我必须在obj中进行更多的挖掘obj将进入几何。检查我的答案新答案。是的,这比我的循环更有效。再次感谢!