ПрограммированиеФорумОбщее

first person, OnHide/OnShow: как реализовать отлов событий?

#0
15:36, 23 апр 2013

Делаю игру от первого лица на OpenGL.
На сцене есть объекты, которые если показываются пользователю,
генерят событие OnShow, и если скрываются - OnHide(), а так же
в любой момент времени, чтобы можно было узнать видит ли игрок объект или нет.
Объектов на сцене не очень много ~40шт.

Как такое реализуется?

Я пока думаю над двумя вариантами:
1. Рендерить сцену в буффер, задав каждому объекту цвет, а там анализировать какие цвета есть на картинке.
2. Все объекты обвесить BBOX-ами и искать пересечение "пирамиды" взгляда и бокса..
Второй способ мне кажется более быстрым, но там если объект стоит за столбом и его  не видно, а игрок смотрит
на столб, то может возникнуть ложное срабатывание.

#1
15:44, 23 апр 2013

Zoobastik
Зачем? Ведь существует frustum. Все что проходит проверку фрустума - видимо, все что не прошло - невидимо

#2
15:56, 23 апр 2013

Zoobastik
Если нужно точно определять, видим объект для игрока или нет, то можно воспользоваться HOC (occlusion query). Во всех остальных случаях, если просто нужно быстро отсечь невидимые объекты: проверка BBox на попадание во Frustum.

#3
15:59, 23 апр 2013

war_zes, спасибо! :)
В API Marmalade SDK (его использую) нашел как раз по этому слову, что что надо.
Насколько я понял, там для каждого объекта строится сфера (вместо обычного бокса) и проверяется пересечение frustum и ее.
Не совсем понятно правда что будет, если объект закрыт другими. Надо попробовать.

#4
16:39, 23 апр 2013

Zoobastik
мы для ботов пускали луч в голову и тело. если хоть один из них доходит до цели то персонаж считается видимым.
это нужно делать только для объектов которые попали в фрустум.

ПрограммированиеФорумОбщее

Тема в архиве.