Aframe / Three. js рассчитывает смещение позиции перетаскивания от пересечения - PullRequest
0 голосов
/ 28 января 2020

Я добавляю некоторые функции, чтобы щелкнуть и перетащить объект, используя измененную версию этого компонента https://github.com/extraymond/aframe-mouse-dragndrop.

Это работает, но объект всегда центрируется на мышке, и я хочу, чтобы он сохранил свое смещение, чтобы он тянулся так, как вы ожидаете.

Я пытался скопировать пересечение с этим

  this.el.addEventListener("mousedown", e => {
      this.el.setAttribute("dragndrop", {intersection: e.detail.intersection})
    }
  })

Затем при перетаскивании я получаю расстояние

      this.worldPos = this.el.object3D.position.clone()

      this.el.parentEl.object3D.localToWorld(this.worldPos)
      this.dist = this.worldPos
        .sub(this.el.sceneEl.camera.el.object3D.position)
        .length();

, затем применяю новую позицию

  updateDirection: function() {
   this.direction.copy(this.el.sceneEl.getAttribute("raycaster").direction);
 },
updateTarget: function() {
  let camera = this.el.sceneEl.camera.el

  this.target.copy(
    camera.object3D.position
      .clone()
      .add(this.direction.clone().multiplyScalar(this.dist + this.range))
  );

  if(this.data.flat)
   this.target.z = this.origin.z

  this.el.parentEl.object3D.worldToLocal(this.target);
},
tick: function() {
  if (this.el.is("dragging")) {
    this.updateDirection();
    this.updateTarget();
    this.el.object3D.position.copy(this.target);
  }
}

Я попытался добавить или вычесть точку пересечения в this.target в разных точках, но не дает желаемого эффекта.

Должен ли я использовать точку пересечения или UV пересечения?

...