Перейти к содержанию

Проверка видимости directx 9 (directx visibility check)


Рекомендуемые сообщения

Здравствуйте, возникла необходимость проверять видимость какого-то объекта или игрока. То есть, вижу ли я его или он находится за стеной.
Как реализовать такое, используя только directx sdk ? Просто видел реализацию с использованием сдк движка игры или внутриигровой функции.

Ссылка на комментарий
Поделиться на другие сайты

41 минуту назад, Senpai сказал:

Как реализовать такое, используя только directx sdk ?

 

Никак. Хотя, стоп, есть же z буфер. Но это не проверка видимости, просто значение действующее на все предметы, которое говорит устройству кого рисовать, а кого нет.

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, partoftheworlD сказал:

 

Никак. Хотя, стоп, есть же z буфер. Но это не проверка видимости, просто значение действующее на все предметы, которое говорит устройству кого рисовать, а кого нет.

То есть можно, имея свои координаты и координаты точки, видимость которой надо проверить ?

Ссылка на комментарий
Поделиться на другие сайты

4 минуты назад, Senpai сказал:

То есть можно, имея свои координаты и координаты точки, видимость которой надо проверить ?

Нет, для такой проверки нужны лучи трассировки и это фитча движка.

Ссылка на комментарий
Поделиться на другие сайты

9 минут назад, partoftheworlD сказал:

Нет, для такой проверки нужны лучи трассировки и это фитча движка.

ну, если я хочу для gta san andreas такое сделать? 

Ссылка на комментарий
Поделиться на другие сайты

7 часов назад, Senpai сказал:

ну, если я хочу для gta san andreas

Конечно есть! Если коротко - берёшь объект - узнаёшь его размер. После - делаешь "луч" как его можно назвать - От объекта двигаешься координатами к игроку по прямому вектору, проверяешь не стоит ли там чего - если стоит (стена например) проверяешь левый угол объекта, потом правый, верх низ, все дела. (Это всё жрёт кучу времени и памяти) и так ты узнаешь только видимость центра объекта и его сторон, (делать больше лучшей это убиться веником). Так же тебе надо проверить находится ли объект в видимости камеры. Если все условия удовлетворены - объект видим, если нет - не видим (или за какой нибудь стеклом и тд). Можно пойти другим путём. Узнать каждые координаты тайлов вокруг персонажа, стены, пол и тд. Их размер и геометрию. После = исходя из этого, опять же по всяким сложным формулам вычисляешь находится ли часть объекта в зоне видимости, лучше проверять по периметру, это тоже будет жрать кучу ресурсов. А и не забывай что у тебя не 1 объект (вероятно) а куча, так что с такими проверками игра станет слайд шоу =).

Ссылка на комментарий
Поделиться на другие сайты

20 часов назад, inaginary сказал:

Конечно есть! 

Спасибо за ответ. Всё было бы уже не так плохо, если бы имелся доступ к функции, отправляющей луч..

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, Senpai сказал:

доступ к функции, отправляющей луч

Так ты её сделай - луч, это всего лишь перебор позиций и проверка есть на них чего или нет

Ссылка на комментарий
Поделиться на другие сайты

Думаю, это то что нужно, если захочется все самому делать, но я предпочел бы использовать функцию движка, это быстрее и надежней.


http://gamedev.stackexchange.com/questions/18436/most-efficient-aabb-vs-ray-collision-algorithms

http://web.cse.ohio-state.edu/~shen.94/681/Site/Slides_files/basic_algo.pdf

http://www.cosinekitty.com/raytrace/raytrace_ebook.pdf

 

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

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.