2017-03-08 81 views
1

我是threejs的新手。在three.js场景中动态获取对象位置

我的场景中有一个对象,我们可以在所有XYZ轴上使用TransformControls.js在场景中移动。

当我使用鼠标单击并拖动任何轴(即X,Y,Z)在场景内翻译/移动对象时。我想获取场景内该特定对象的更新的X,Y,Z坐标坐标。

我用mesh.position.set(0, 0, 0);设置对象的位置之前渲染场景,但我无法找到如何让一个场景内的物体的动态位置。

最终,我想在转换操作后保存更新后的位置坐标,并在用户返回页面或进行页面刷新时,使用更新位置坐标处的对象坐标重新呈现场景。

任何指针都会非常有帮助。

谢谢

+0

'mesh.position'是一个'Vector3',它是网格的局部位置。它看起来像TransformControls更新这个向量,所以你应该能够在转换完成后从'mesh.position'获得新的位置。这是你想要做什么,或者'mesh.position'在转换之后没有被更新? – TheJim01

+0

是的,这正是我想要做的。当我调用'THREE.TransformControls(camera,renderer.domElement)'后调用'console.log(mesh.position.x +','+ mesh.position.y +','+ mesh.position.z)''我得到的输出为'0,0,0'因此,在我移动场景内的对象后,mesh.position没有得到更新。 –

+0

还有一个问题:您正在使用哪个版本的'three.js'? – TheJim01

回答

1

THREE.TransformControls需要几个步骤来使用。

  1. 创建THREE.TransformControls对象
  2. 将它添加到您的场景
  3. 它连接到要操纵

var xformControl = new THREE.TransformControls(camera, renderer.domElement); 
 
scene.add(xformControls); 
 
// assuming you add "myObj" to your scene... 
 
xformControl.attach(myObj); 
 
// and then later... 
 
xformControl.detatch();

附加控制目标对象将插入一个操纵“gizmo”到s中cene。拖动Gizmo的各个部分将执行不同类型的转换。在完成Gizmo零件的转换后,检查mesh.position应反映新的位置。

为清楚起见,其他信息:直到您使用“小玩意儿”来移动它

对象的位置不会被更新。例如:

  1. 你的目的是在场景中(10,10,10)
  2. xformControl.attach(yourObject)
  3. 的 “小物件” 在创建(10,10,10)
  4. 你的物体保持在(10,10,10)
  5. 使用 “小玩意儿” 在+ Y方向的对象平移
  6. 你的对象将有一个更新的位置
  7. console.log(yourObject.position.y > 10); // true
+0

尝试阅读xformcontrols的位置并使用three.js检查器。它可以让你直观地检查所有对象,层次和变换,并防止无休止的搜索。 – Hacky

+0

感谢@TheJim01了解使用'Three.TransformControls'的详细说明。我有相同的代码。你是现货!调试后,我发现'mesh.position'确实有更新的位置。但在'xformControl.attach(myObj)'后面做一个'console.log(mesh.position.x)''并不能让我获得更新的位置。 –

+0

谢谢@Hacky建议使用炫酷的Chrome扩展[three.js检查器](https://chrome.google.com/webstore/detail/threejs-inspector/dnhjfclbfhcbcdfpjaeacomhbdfjbebi)。是的,即使我使用检查器来检查'xformcontrols'的位置,但是console.log(xformcontrols.position.x)仍然不起作用。 –

相关问题