Я пытаюсь вычислить, какие плитки может «видеть» конкретный юнит, если смотреть на определенное направление на карте плиток (в пределах определенного диапазона и угла наклона). Самым простым способом было бы нарисовать определенное количество плиток наружу и лучевую трансляцию к каждой плитке. Однако я надеюсь на что-то более эффективное. Картина говорит тысячу слов:
Красная точка - это единица (которая обращена вверх). Моя цель - подсчитать желтые плитки. Зеленые блоки - это стены (стены между плитками, и легко проверить, можно ли пройти между двумя плитками). Синяя линия представляет собой что-то вроде метода «лучевого вещания», о котором я говорил, но я бы предпочел не делать этого.
РЕДАКТИРОВАТЬ: Единицы могут быть направлены только на север / юг / восток / запад (0, 90, 180 или 270 градусов), а FoV всегда 90 градусов. Следует упростить некоторые расчеты. Я думаю, что есть какой-то алгоритм рекурсивного ish / stack-based / queue-based, но я не могу понять это.
Благодарность!
Ответы:
Yay я нашел исследовательскую работу!
С точки зрения вычислительной стоимости Shadow Mapping кажется довольно явным победителем.
Используемый алгоритм можно найти здесь, а реализацию C # можно найти здесь , соответствующий бит ниже.
источник