Представьте себе эту сцену three.js, созданную с помощью OrthographicCamera и OrbitControls:
Когда пользователь перетаскивает желтый диск (обозначающий Солнце), диск должен перемещаться по желтому кругу в ответ на это действие. Вот сцена с другого ракурса, чтобы вы могли видеть полный желтый круг:
Итак, мой обработчик событий должен определить, какая точка на этом круге ближе всего к текущей позиции курсора. Между прочим, этот желтый кружок - ТРИ.
Я использую THREE.Raycaster для определения некоторых событий наведения курсора мыши. , используя свою intersectObjects()
функцию, но мне непонятно, как найти ближайшую точку отдельного объекта с помощью этого Raycaster. Я предполагаю, что есть простая математика, которую я могу сделать после перевода положения мыши в мировые координаты. Может кто-то помочь мне с этим? Полезен ли здесь Raycaster от Three.js? Если нет, как мне определить ближайшую точку этой сетки?
Полный исходный код здесь, если он полезен: https://github.com/ccnmtl/astro-interactives/blob/master/sun-motion-simulator/src/HorizonView.jsx Найдите this.sunDeclination
, который соответствует объекту Mesh желтого круга.
Для рабочей демонстрации перейдите сюда: https://ccnmtl.github.io/astro-interactives/sun-motion-simulator/
Для справки, солнце должно вести себя так: https://cse.unl.edu/~astrodev/flashdev2/sunMotions/sunMotions068.html (требуется Flash)