#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);
}