访问Object3D使用OBJMTLLoader加载

Access Object3D loaded using OBJMTLLoader

本文关键字:加载 OBJMTLLoader 使用 Object3D 访问      更新时间:2023-09-26

我正在构建一个允许用户以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.

任何帮助都非常感谢!

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

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

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

希望这将帮助别人。谢谢你给我指了正确的方向!

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