threejs移动多个对象

时间:2018-06-14 15:02:40

标签: typescript three.js

我有一个包含多个对象的threejs场景。当我选择一个并在屏幕上移动时,如果我选择> 1所有对象都放在与对象1相同的位置。但是它们需要保持原样。这是一些代码:

translateObjectTo(absX, absY, absZ) {
    this.selectedObjects.forEach((selection) => {
        if (absX !== null) {
            selection.translateX(absX - selection.position.x);
        }
        ...
    });
}

如果我写selection.translateX(absX);它有效但当然错误的值

1 个答案:

答案 0 :(得分:1)

Object3D.translateX(和其他翻译方法)是相加的。这意味着,如果您的X值已经为5,并且您致电myMesh.translateX(5),那么您的新myMesh.position.x将为10

为此,您需要计算拖动对象的原始position.x及其新position.x之间的差异,然后将其应用于所有其他对象。

这里有一些代码/伪代码作为一个非常宽松的例子。如果您希望在拖动时发生这种情况,则需要计算每个帧的差异(或者通常是您打算更新)。

// start dragging
originalPosition.copy(dragObject.position)

// drag is done (or you're ready to update)
let xDiff = originalPosition.x - dragObject.position.x

// apply this difference to all selected objects (except the dragged one)
selectedObjects.forEach(function(obj){
  if(obj.id !== dragObject.id){
    obj.translateX(xDiff)
  }
})