我想在每个渲染/动画函数调用上移动导入的对象(.obj)。
因此,我制作了该对象的副本,以便在loader.load
之外访问它,但每次我调用companion.position
我都会收到此错误。 (companion
是一个全局变量)
另外,我在渲染函数中尝试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 );
});
});
答案 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 = ....