Решение этого вопроса заставило меня вспомнить тригонометрию и векторную алгебру. Постановка задачи: при создании изменять объект вслед за движением мыши. Что мы имеем: координаты курсора в экранных координатах, угол обзора камеры, соотношение сторон.Нужно определить: насколько отличается масштаб вида в мировых координатах в данный момент времени от масштаба экрана, найти расстояние от положения объекта в экранных координатах и умножить его на масштаб вида в текущий момент времени. Чтоб смотреть на камеру со стороны (сверху), я создал третий рендер и поместил его во второй канвас. При нажатии на канвас он увеличивается на весь экран. В последствии сделаю там ортогональную камеру. Первое, что мы сделаем – определим положение объекта в экранных координатах. Для этого спроецируем вектор положения объекта на экран. В three.js предусмотрена функция project(). Клонируем вектор положения объекта, иначе функция изменит положение объекта. Переводим в координаты экрана: На видео первый желтый шарик показывает положение создаваемого объекта. Теперь определим положение камеры в 3D пространстве и запишем его в новый вектор. Для этого также предусмотрена функция: Аналогично определим направление камеры, выраженный единичным вектором: Определим расстояние от камеры до объекта: Теперь из центра из камеры получим точку, отстоящую на расстояние равное расстоянию от камеры до объекта: На видео это второй желтый шарик и зеленая линия,
Читать далее