Как отобразить по границам экрана индикаторы объектов вне её поля? То есть какие расчеты нужно сделать чтобы узнать в какой точке рисовать индикатор, который обозначает куда нужно вращать камеру, чтобы объект появился в поле зрения?
Библиотека three.js
Примерно так. Треугольники - стрелки, куда нужно вращать камеру.
В скринспейсе вычисляй позицию, а затем клэмпай до координат вьюпорта (-1, 1).
monobogdan
> В скринспейсе вычисляй позицию, а затем клэмпай до координат вьюпорта (-1, 1).
Плохой совет.
Надо проецировать объекты на сферу, с центром в позиции кадра и полюсом в центре экрана. Если точка вне экрана, то её нужно сдвинуть к экрану, но строго по меридиану.
Если есть уже готовая функция, которая даёт координаты объекта на экране, то ничего сложного - вычитаем координаты курсора из координат объекта, далее ставим четыре условия с обнулением одной из оси до границ экрана +размер иконки и изменениям саму иконку объекта.
Соответственно действуем через список объектов.
Про сферу не понял как лучше сделать, через clamp тоже не получается.
Сначала переводил центр экрана в мировые координаты, потом вычитал из позиции объекта мировые координаты центра экрана. Переводил в экранные координаты, вычислял нормаль искал по какой оси помещается эта нормаль до границ экрана (то есть саму нормаль умножал на ((ширина_экрана / 2) / abs(x)), и второй такой вектор ((высота_экрана / 2) / abs(y))) и длина какого из этих двух векторов меньше и была точкой на границе экрана. Переводил в мировые координаты и рисовал в тремерном постранстве точку, но все равно как-то не работало.
Если сферу полюсом по направлению камеры выставить, то получается нужно найти с ней точку пересечения в мировых координатах, пересечения вектора позиции объекта минус позиция центра экрана в мировых координатах. Потом найти вектор, который получается из разности точки пересечния сферы и центра позиции экрана, найти угол между направлением камеры и этим вектором? А потом смотреть в какой полусфере находится позади или спереди камеры? А дальше?
Salamandr
спасибо, гляну
Тоже думал на основе пересечения с frustum'ом сделать, такое апи в three.js как раз есть, но предыдущие два метода то же бы осознать, которые описаны здесь. С clamp и в экранных координатах более-менее разобрался и получилось сделать, а сферу так и не понял