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

Зона видимости

#0
16:55, 7 янв. 2011

Всем привет!

Столкнулся с проблемой нахождения так называемой зоны видимости.

Имеется некоторая модель поля(карты), которая представляется двумерной сеткой. Также имеется модель юнита, который имеет сектор обзора, заданный радиусом обзора и углом. Мне же нужно получить то множество клеток(элементов поля) которые попадают в поле зрения юнита с учетом типа клеток поля.

Какие способы, методы, алгоритмы можете предложить для попытки реализации моей задачи?


#1
17:08, 7 янв. 2011

http://www.gamedev.ru/code/forum/?id=142189

#2
21:06, 7 янв. 2011

я делал обход по кругу на 360гр и строил лучи

Изображение
#3
13:27, 9 янв. 2011

1. Если карта не меняется то генерируем BSP дерево.
2. Если карта построеена так что блоки видимости(комнаты, коридоры) можно разделить на прямоугольные и треугольные области. То можно пустить лучи в вершины каждого видимого прямоугольника, и сортировать их по расстоянию от объекта наблюдения.

Вариантов очень много, всё зависит от того какая карта, чем можно пренебречь, и от того как у вас она хранится в памяти.

#4
18:27, 10 янв. 2011

Спасибо за советы! :)

Я остановился на варианте с построением лучей в пределах сектора видимости и трассировкой каждого луча. К недостаткам этого метода можно отнести низкую скорость работы(может быть так реализовал), дублирование некоторых клеток(особенно тех, которые расположены близко к юниту) и расхождение лучей при большом радиусе обзора.

#5
18:32, 10 янв. 2011

Можно алгоритм попробовать улучшить трассировкой одного луча до препятствия, и затем следованием по отрезку препятствия например, вправо до конца отрезка. Затем сразу за ним трассировку луча в проход, до следующего препятствия, проход по нему до конца. Что-то подобное DOOM1/2, там очень простым алгоритмом на плоскости вычислялись все видимые в данный момент куски стен, передаю привет BSP.
Получается веер треугольников от камеры до стен.
Все клетки карты, попавшие в вычисленный веер треугольников, считаются видимыми.

#6
13:54, 11 янв. 2011

PAVEL_USER
Посмотри libfov, может подойдет.

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

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