我正在构建一个允许用户以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.
非常感谢任何帮助!
答案 0 :(得分:5)
@mrdoob的评论让我自己解决了这个问题。当jquery回调被触发时,我的变量obj3d
确实超出了范围。我能够通过将变量声明移动到全局范围来解决它。
此外,我没有看到在three.js场景中立即应用更改的原因是因为我需要调用render()
函数。
$('#initial_y').change(function() {
obj3d.position.y = $(this).val();
render();
});
希望这会帮助别人。谢谢你指出我正确的方向!
答案 1 :(得分:0)
我不确定,但我认为您需要使用obj3d = object.clone()
,因为以后您的对象会被销毁。