Войти
ПрограммированиеФорумГрафика

Отображение индикаторов объектов в не поля зрения камеры

#0
21:26, 2 янв 2023

Как отобразить по границам экрана индикаторы объектов вне её поля? То есть какие расчеты нужно сделать чтобы узнать в какой точке рисовать индикатор, который обозначает куда нужно вращать камеру, чтобы объект появился в поле зрения?

Библиотека three.js

Примерно так. Треугольники - стрелки, куда нужно вращать камеру.
cameraview | Отображение индикаторов объектов в не поля зрения камеры

#1
21:57, 2 янв 2023

В скринспейсе вычисляй позицию, а затем клэмпай до координат вьюпорта (-1, 1).

#2
23:00, 2 янв 2023

monobogdan
> В скринспейсе вычисляй позицию, а затем клэмпай до координат вьюпорта (-1, 1).
Плохой совет.

Надо проецировать объекты на сферу, с центром в позиции кадра и полюсом в центре экрана. Если точка вне экрана, то её нужно сдвинуть к экрану, но строго по меридиану.

#3
12:36, 4 янв 2023

Если есть уже готовая функция, которая даёт координаты объекта на экране, то ничего сложного - вычитаем координаты курсора из координат объекта, далее ставим четыре условия с обнулением одной из оси до границ экрана +размер иконки и изменениям саму иконку объекта.
Соответственно действуем через список объектов.

#4
13:05, 4 янв 2023

Про сферу не понял как лучше сделать, через clamp тоже не получается.
Сначала переводил центр экрана в мировые координаты, потом вычитал из позиции объекта мировые координаты центра экрана. Переводил в экранные координаты, вычислял нормаль искал по какой оси помещается эта нормаль до границ экрана (то есть саму нормаль умножал на ((ширина_экрана / 2) / abs(x)), и второй такой вектор ((высота_экрана / 2) / abs(y))) и длина какого из этих двух векторов меньше и была точкой на границе экрана. Переводил в мировые координаты и рисовал в тремерном постранстве точку, но все равно как-то не работало.

#5
15:39, 4 янв 2023

Если сферу полюсом по направлению камеры выставить, то получается нужно найти с ней точку пересечения в мировых координатах, пересечения вектора позиции объекта минус позиция центра экрана в мировых координатах. Потом найти вектор, который получается из разности точки пересечния сферы и центра позиции экрана, найти угол между направлением камеры и этим вектором? А потом смотреть в какой полусфере находится позади или спереди камеры? А дальше?

#6
20:28, 4 янв 2023

Запустить видео по клику - Как делать игрыЗапустить видео по клику - Как делать игры

#7
9:01, 5 янв 2023

Salamandr
спасибо, гляну

#8
9:18, 5 янв 2023

Тоже думал на основе пересечения с frustum'ом сделать, такое апи в three.js как раз есть, но предыдущие два метода то же бы осознать, которые описаны здесь. С clamp и в экранных координатах более-менее разобрался и получилось сделать, а сферу так и не понял

ПрограммированиеФорумГрафика