Я пытаюсь понять функцию camera.lookAt, созданную в Three.js, и реализовать свою собственную.
Я использую глаз = положение камеры, цель = взгляд цели в точку, и вверх всегда (0, 1, 0). Друг предложил, что очевидным способом поворота камеры, чтобы посмотреть на точку в пространстве, было бы получить желаемое движение вперед путем вычисления цели - глаза и вычисления угла между вектором движения камеры (0, 0, -1) и цель вперед (используя метод atan2, описанный в этих ответах ), и это угол поворота. Я был бы в состоянии найти ось вращения, вычисляя перекрестное произведение вектора вперед и желаемого направления вперед. Я бы использовал функцию типа setFromAxisAngle , чтобы получить результирующий кватернион.
Пытался нарисовать здесь:
Будет ли это работать в теории? При тестировании по каноническому методу lookAt , который использует глаз, вверх и цель и выполняет z = (глаз - цель), x = крест (вверх, z), y = крест (x, z) - (также, почему это глаз - цель вместо цели - глаз?) - Я вижу маленький (<0,1 различия). </p>