Senpai Опубликовано 22 февраля, 2019 Поделиться Опубликовано 22 февраля, 2019 Здравствуйте, возникла необходимость проверять видимость какого-то объекта или игрока. То есть, вижу ли я его или он находится за стеной. Как реализовать такое, используя только directx sdk ? Просто видел реализацию с использованием сдк движка игры или внутриигровой функции. Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 22 февраля, 2019 Поделиться Опубликовано 22 февраля, 2019 41 минуту назад, Senpai сказал: Как реализовать такое, используя только directx sdk ? Никак. Хотя, стоп, есть же z буфер. Но это не проверка видимости, просто значение действующее на все предметы, которое говорит устройству кого рисовать, а кого нет. Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 22 февраля, 2019 Автор Поделиться Опубликовано 22 февраля, 2019 3 часа назад, partoftheworlD сказал: Никак. Хотя, стоп, есть же z буфер. Но это не проверка видимости, просто значение действующее на все предметы, которое говорит устройству кого рисовать, а кого нет. То есть можно, имея свои координаты и координаты точки, видимость которой надо проверить ? Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 22 февраля, 2019 Поделиться Опубликовано 22 февраля, 2019 4 минуты назад, Senpai сказал: То есть можно, имея свои координаты и координаты точки, видимость которой надо проверить ? Нет, для такой проверки нужны лучи трассировки и это фитча движка. Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 22 февраля, 2019 Автор Поделиться Опубликовано 22 февраля, 2019 9 минут назад, partoftheworlD сказал: Нет, для такой проверки нужны лучи трассировки и это фитча движка. ну, если я хочу для gta san andreas такое сделать? Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 24 февраля, 2019 Автор Поделиться Опубликовано 24 февраля, 2019 В 22.02.2019 в 22:01, Senpai сказал: ну, если я хочу для gta san andreas такое сделать? Есть какой-то способ? Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 24 февраля, 2019 Поделиться Опубликовано 24 февраля, 2019 7 часов назад, Senpai сказал: ну, если я хочу для gta san andreas Конечно есть! Если коротко - берёшь объект - узнаёшь его размер. После - делаешь "луч" как его можно назвать - От объекта двигаешься координатами к игроку по прямому вектору, проверяешь не стоит ли там чего - если стоит (стена например) проверяешь левый угол объекта, потом правый, верх низ, все дела. (Это всё жрёт кучу времени и памяти) и так ты узнаешь только видимость центра объекта и его сторон, (делать больше лучшей это убиться веником). Так же тебе надо проверить находится ли объект в видимости камеры. Если все условия удовлетворены - объект видим, если нет - не видим (или за какой нибудь стеклом и тд). Можно пойти другим путём. Узнать каждые координаты тайлов вокруг персонажа, стены, пол и тд. Их размер и геометрию. После = исходя из этого, опять же по всяким сложным формулам вычисляешь находится ли часть объекта в зоне видимости, лучше проверять по периметру, это тоже будет жрать кучу ресурсов. А и не забывай что у тебя не 1 объект (вероятно) а куча, так что с такими проверками игра станет слайд шоу =). Ссылка на комментарий Поделиться на другие сайты Поделиться
Senpai Опубликовано 25 февраля, 2019 Автор Поделиться Опубликовано 25 февраля, 2019 20 часов назад, inaginary сказал: Конечно есть! Спасибо за ответ. Всё было бы уже не так плохо, если бы имелся доступ к функции, отправляющей луч.. Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 25 февраля, 2019 Поделиться Опубликовано 25 февраля, 2019 2 часа назад, Senpai сказал: доступ к функции, отправляющей луч Так ты её сделай - луч, это всего лишь перебор позиций и проверка есть на них чего или нет Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 25 февраля, 2019 Поделиться Опубликовано 25 февраля, 2019 Думаю, это то что нужно, если захочется все самому делать, но я предпочел бы использовать функцию движка, это быстрее и надежней. 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 Последняя ссылка помогла мне разобраться в трассировке лучей, что помогло в нахождении функции движка. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения