我正在尝试操作(例如更改位置、缩放、旋转)在 Three.js 中使用 OBJLoader 加载的对象。虽然这很容易做到一次,但我无法弄清楚如何在我想要的时候做到这一点,例如在动画循环期间,或者在初始加载回调之外的任何地方。
这是我的代码:
function loadObj( path, name )
{
var obj;
var mtlLoader = new THREE.MTLLoader();
mtlLoader.setPath( path );
mtlLoader.load( name+".mtl", function( materials ) {
materials.preload();
var objLoader = new THREE.OBJLoader();
objLoader.setMaterials( materials );
objLoader.setPath( path );
objLoader.load( name+".obj", function( object ) {
obj = object;
obj.position.x = 20;
scene.add( obj );
});
});
return obj;
}
var myObj = loadObj( "assets/", "test" );
myObj.position.y = 20;
这里需要注意的关键点是:
- 我可以加载它并在循环内很好地操作它,并且不会引发错误;
- 如果我执行上述操作,我会在最后一行收到错误消息,其中指出:
Cannot read property 'position' of undefined
. - 如果我
obj
在函数外部定义(作为全局),则此错误仍然存在,然后相应地引用它。
我已经用 JSON 加载器尝试了类似的代码,得到了相同的结果(我可以在加载中操作它,但之后不能)。