2010-04-23 4 views
2

Если вы посмотрите в верхнем правом углу, вы увидите на радаре вражескую единицу зрения.Как визуализировать и обнаруживать линию видимости?

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

Я не знаю формулу или использоваться любые математические LIBS/пространств имен в C#

-edit-

В основном это 2d прототип. ничто не должно быть совершенным, и у него будет подвижная камера, юниты, и она будет выглядеть только слева вверх, но не по диагонали. Там может быть прямая видимость стены, но больше ничего. Также другие враги не должны запускать действие, когда они входят в него.

Так что мне действительно нужен источник (враг), dst (игрок) и следить за тем, чтобы стены блокировали зрение.

alt text http://image.com.com/gamespot/images/screenshots/gs/action/metalgearsolid/metalgearsolid_790screen001.jpg

-edit- я в конечном итоге, используя прямоугольник. Это было достаточно хорошо, и я смог поработать над другим в прототипе , а затем написал код raycast.

+0

Определите угол обзора, а затем просто нарисуйте векторы? –

ответ

3

Это действительно зависит от того, как настроена геометрия вашего мира, но обычный метод осуществляется через ray casting. То есть вы рисуете воображаемую линию между собой и врагом (или тем, что вас интересует), и запрашивайте среду, чтобы увидеть, есть ли какая-либо геометрия, пересекающая эту линию.

Геометрия другого мира будет иметь различные методы выполнения лучевого литья (например, дерево BSP будет отличаться от системы портала, которая будет отличаться снова от высоты поля и т. Д.).

+0

он не должен быть сложным или очень быстрым. Просто не смешно медленно. Я редактирую вопрос для получения дополнительной информации. –

+2

Опять же, это полностью зависит от того, как вы храните геометрию мира. Если ваш мир состоит из простого списка линий, которые представляют «стены», вам просто нужно будет сделать серию лучей между пересечениями линии, соединяющей игрока и врага, и линий, составляющих стены. Если какой-либо пересекается, ваша линия видимости блокируется. –