Вычислить перемещение xz на плоскости с поворотом камеры

#javascript #three.js #augmented-reality #hammer.js

#javascript #three.js #дополненная реальность #hammer.js

Вопрос:

Я перемещаю объект 3D с помощью HammerJS в пространстве AR.

Это работает нормально, пока я не перемещаю свой телефон (который является камерой)…

 const newTranslation = new THREE.Vector3(this._initTranslation.x   e.deltaX, this._initTranslation.y, this._initTranslation.z   e.deltaY);
  

инициализация … является исходной для Object3D

Когда я перемещаюсь, движение все еще происходит по осям x z, с которых я начал. (Я провожу пальцем вверх по телефону (чтобы переместить объект назад (по оси z)) вместо этого он перемещается слева направо)

Я знаю, что мне нужно учитывать вращение камеры при подсчете, чтобы перевести с камеры на мир, но понятия не имею, как это сделать.

Заранее спасибо за вашу помощь.

Ответ №1:

Я исправил это самостоятельно. Вот мое решение на случай, если оно кому-то понадобится:

Теперь я поворачиваю точку на угол поворота моей камеры:

 const movePoint = new THREE.Vector2(e.deltaX, e.deltaY);
movePoint.rotateAround(new THREE.Vector2(0, 0), this.getCameraAngle());

const newTranslation = new THREE.Vector3(this._initTranslation.x   movePoint.x, 
this._initTranslation.y, this._initTranslation.z   movePoint.y);
  

И для угла камеры:

 public getCameraAngle (): number {
  const cameraDir = new THREE.Vector3();
  this._arCamera.getWorldDirection(cameraDir);
  cameraDir.setY(0);
  cameraDir.normalize();

  return Math.atan2(cameraDir.z, cameraDir.x) - Math.atan2(-1, 0);
}