使用OBJMTLLoader加载Access Object3D

时间:2015-10-08 21:47:50

标签: 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 );
    render();

    obj3d = object;

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

}, onProgress, onError );

问题似乎是,当我在load函数之外时,对Object3D的引用不再可用。上面的代码给出了一个javascript错误:

Cannot access property 'position' of undefined.

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:5)

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

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

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

希望这会帮助别人。谢谢你指出我正确的方向!

答案 1 :(得分:0)

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