Drag3D是个好东西,初始化定义好拖放的平面、被拖放的物体、以及VIEW,即可实现3D的拖放。
但是如果拖动的3D对象A是另一个3D对象B的子对象(child),同时B不在场景中心的话,DRAG对象A,是会产生不准确的偏移的。
因为Drag3D是根据被拖动对象的自身坐标来运算的,所以当被拖动对象的自身坐标和全球坐标不重合的时候,就会产生一定的偏移,这种偏移的XYZ距离值,其实就是父容器B的XYZ坐标。我们只要把A被改变后产生偏移错误的坐标,再做一次处理,减去父容器B的xyz坐标,即可实现准确的拖动。
那么,如果这个被拖动的对象是层层嵌套中的对象怎么办呢?难道要递归地一层层获取上层的父容器XYZ坐标,每获取一个父容器就做一次修正吗?
完全没必要,只要做如下处理:
_object3d.x -= _object3d.scenePosition.x - _object3d.x;
_object3d.y -= _object3d.scenePosition.y - _object3d.y;
_object3d.z -= _object3d.scenePosition.z - _object3d.z;
被拖动物体的全球坐标减去自身坐标,就可以一次获取物体的总偏移值了。