Перейти к содержанию
Авторизация  
Senpai

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
41 минуту назад, Senpai сказал:

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, partoftheworlD сказал:

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
4 минуты назад, Senpai сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, partoftheworlD сказал:

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
В 22.02.2019 в 22:01, Senpai сказал:

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

Есть какой-то способ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
7 часов назад, Senpai сказал:

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

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

  • Смешно 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

 

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

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

×

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

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