Я добавляю некоторые функции, чтобы щелкнуть и перетащить объект, используя измененную версию этого компонента 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 пересечения?