Объект вне камеры OpenGL - PullRequest
3 голосов
/ 16 мая 2011

Я использую перспективный вид с gluPerspective и gluLookAt, и у меня есть координаты мира x, y объекта.Как я могу определить, находится ли объект за пределами видимой области?Обратите внимание, что камера всегда движется.

Ответы [ 2 ]

5 голосов
/ 16 мая 2011

Первым делом первым: в OpenGL нет камеры.Это просто трансформирует вершины вокруг.А gluLookAt просто применяет преобразование к объектам, обратным движению мысленной камеры.

Решение уже было дано в первом комментарии Роберта Массайоли: В OpenGL перспективное преобразование описывается в терминахfrustum ( gluPerpective просто вычисляет параметры frustum и передает их glFrustum ).Таким образом, определяя отбраковку усеченных объектов, то есть, если они выбракованы, вы определяете, видны ли они по-прежнему.

0 голосов
/ 16 мая 2011

Когда вы говорите, что они покидают камеру, вы имеете в виду, что они сбоку, потому что вы смотрите на фиксированное расстояние? ... или ты имеешь в виду, что они просто исчезают.

Если это первый случай (со стороны кадра), вы сможете рассчитать, как далеко от плоскости x, y вам нужно переместить камеру на основе текущих настроек перспективы.

Если это последний случай, вам, вероятно, просто нужно увеличить максимальную глубину Z, чтобы остановить их отбраковку.

[Редактировать 1] В вызове gluPerspective вы устанавливаете угол обзора и соотношение сторон. Вы должны знать расстояние до вашего самолета и расстояние от вашей центральной точки до автомобилей, чтобы у вас была вся необходимая информация. Все, что осталось, - это небольшая тригонометрия, чтобы определить, что можно просматривать, а что нет.

[Правка 2] Я нашел еще один очень полезный учебник , в котором описываются различные способы выбора нужной вам области усечения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...