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