Three.js |无法访问loader.load之外的导入对象属性

时间:2017-12-01 08:30:27

标签: three.js

我想在每个渲染/动画函数调用上移动导入的对象(.obj)。 因此,我制作了该对象的副本,以便在loader.load之外访问它,但每次我调用companion.position我都会收到此错误。 (companion是一个全局变量)

enter image description here

另外,我在渲染函数中尝试object.traverse并且我得到了相同的错误(遍历被错误的位置替换)。

请帮忙。提前谢谢。

以下是我加载obj并将其复制到companion的位置。

var mtlLoader = new THREE.MTLLoader();

mtlLoader.setPath( 'obj/' );
mtlLoader.load( 'satellite.mtl', function( materials ) {

    materials.preload();

    var objLoader = new THREE.OBJLoader();
    objLoader.setMaterials( materials );
    objLoader.setPath( 'obj/' );
    objLoader.load( 'satellite.obj', function( object ) {

        object.position.z = 300;
        object.scale.set( 0.25, 0.25, 0.25 );
        object.rotation.y = Math.PI;

        object.traverse( function( child ) { 

            if ( child instanceof THREE.Mesh ) { 

                child.castShadow = true;
                if ( child.material !== undefined ) child.material.side = THREE.DoubleSide;

            }
        });

        companion = object;
        scene.add( object );
    });

});

1 个答案:

答案 0 :(得分:2)

您可以使用以下模式:

var parent = new THREE.Group();
scene.add( parent );

在您的加载代码中替换

// companion = object;
// scene.add( object )
// with
parent.add( object ); // will add the object to the parent but also to the scene

然后在animate()函数中,您可以执行以下操作:

parent.position.x = ....