Javascript 访问使用OBJMTLLoader加载的Object3D

Javascript 访问使用OBJMTLLoader加载的Object3D,javascript,three.js,Javascript,Three.js,我正在构建一个应用程序,允许用户上传obj/mtl格式的3D模型。管理员在我们的查看器中显示加载对象的预览。我想为用户提供控件来设置加载对象的初始y位置和相机的初始z位置。我已经把相机的部分做好了,但是我在y位置上运气不好。我的代码: var obj3d; loader.load( model_obj, model_mtl, function ( object ) { object.position.y = y_init; scene.add( object ); re

我正在构建一个应用程序,允许用户上传obj/mtl格式的3D模型。管理员在我们的查看器中显示加载对象的预览。我想为用户提供控件来设置加载对象的初始y位置和相机的初始z位置。我已经把相机的部分做好了,但是我在y位置上运气不好。我的代码:

var obj3d;

loader.load( model_obj, model_mtl, function ( object ) {
    object.position.y = y_init;
    scene.add( object );
    render();

    obj3d = object;

    $('#initial_y').change(function() {
      obj3d.position.y = $(this).val();
    });

}, onProgress, onError );
问题似乎是,一旦我离开
load
函数,对
Object3D
的引用就不再可用。上面的代码给出了一个javascript错误:

Cannot access property 'position' of undefined.

非常感谢您的帮助

我不确定,但我认为您需要使用
obj3d=object.clone()
,因为后来您的对象被销毁。

来自@mrdoob的评论让我自己解决了这个问题。触发jquery回调时,我的变量
obj3d
确实超出范围。我能够通过将变量声明移动到全局范围来解决这个问题

此外,我没有看到在three.js场景中立即应用更改的原因是我需要调用
render()
函数

$('#initial_y').change(function() {
    obj3d.position.y = $(this).val();
    render();
});

希望这能帮助其他人。谢谢你给我指明了正确的方向

听起来这是jQuery代码中的范围问题。错误是指
object.position
还是
obj3d.position
?@gaitat错误是指
obj3d.position
。当更改
#初始_y
输入时,它会显示。