Метод попадания пуль
Главний вопрос, кто может поделится своим опытом и рассказать о самом приемлимом методе, по какому вычисляется попала ли пуля в нужную нам цель?
И одновременно выставляю на критику свою мыслю, которая может пригодится при особых случаях, когда скорость пули больше толщины игрока... Бегают игроки, они все маленькие размером, и по сравнению со скоростю пуль, метод колизии пули с игроком в некоторых случаях просто безнадежен ибо пуля просто может протлитеть сквозь персонажа и даже его незаметить. Будит ли глючным способом решить ету проблему так: В каждую пулю вставляем припаренченую к ним камеру Код:
Local TempPivot=CreatePivot() п.с. Надеюсь я пояснил доступно, если кто нипонял могу нарисовать... |
Ответ: Метод попадания пуль
В WarTech был такой метод. у снаряда есть текущая позиция и позиция на прошлом кадре. Получается отрезок, который прошел снаряд, далее находится пересечение етого отрезка и bounding сферы противника. если пересечение есть - значит попали.
|
Ответ: Метод попадания пуль
Цитата:
Цитата:
Для подтверждения: Код:
Graphics3D(800, 600, 32, 2) |
Ответ: Метод попадания пуль
Спасибо за ответы, в моем случае колизий в игре небудет вообще. У меня массив с клетками проходимости.
п.с. Думаю буду юзать LinePick |
Ответ: Метод попадания пуль
Вложений: 1
Товарищи! Что ж вы!
Просто помним координаты в предыдущем кадре, и с текущем. По ним строим уравнение прямой: Ax+By+Cz+D=0 (в Википедии можно найти уравнения для нахождения коэффициентов). Потом подставляем координаты игрока в соответствующие места: Dist#=A*EntityX(E)+B*ENtityy(E)+C*EntityZ(E)+D Теперь мы имеем расстояние от игрока до прямой, осталось вычислить, принадлежит ли прозиция игрока к отрезку. Как сделать пока не думал, но знаю что несложно |
Ответ: Метод попадания пуль
http://mathworld.wolfram.com/Circle-...ersection.html
http://local.wasp.uwa.edu.au/~pbourk...ry/sphereline/ И реализация на c++ PHP код:
Upd. Хмм... А у меня тут оказывается в закромах лежит такой алгоритм: PHP код:
|
Ответ: Метод попадания пуль
Павел
Randomize LinePick\EntityPick делает практически тоже самое, только еще использует Space Partition алгоритм (незнаю какой именно) вместо перебора всех юнитов, который будет в вашем случае. Ваш К.О. :) ЗЫ 3\5 квадратных корней для Ray-Sphere intersection (да еще вдобавок только 2д) это сильно, да :)) |
Ответ: Метод попадания пуль
Цитата:
|
Ответ: Метод попадания пуль
Ээээ EvilChaotic в ТЗ не было пункта " у нас уже есть супер-двиг с хитрыми оптимизациями и разибенеиями на группы по произвольному критерию за 0msec".
Уводишь несолкько задчау, имхо. С точки зрения вопроса глобальной оптимизации - прав, но автор спрашивает не про это (возможно у него это и так реализовано), осталось дело за малым (разработка сверху-вниз). Решение Venom2 подкупает ещё и тем, что даже EntityDistance пашет быстрее чем ручная реализация Т.Пифагора: втроенные методы предпочтительнее, хотя бы из-за уровня удаления от ядра. Пост Randomize обязателен к изучению: 1) понимание механизма 2) подобные алгоритмы имеют множесто применений (маст рид!) |
Ответ: Метод попадания пуль
Цитата:
Цитата:
ЗЫ Про лагоритм пересечения советую глянуть сюда , не стоит для игр применять математику "влоб", в большинстве случаев оригинальные алгоритмы слишком тяжелы для этого, поэтому стоит потратить немного времени на поиски соответствующих адаптаций ;) |
Ответ: Метод попадания пуль
Народ, без секторных реализаций (у автора массив, он может выступать в роли хотя бы стандартного сравнения боунти бокса отрезка и объектов попадания, и то, это уже накладно.
При пулемёте, со скоростью стрельбы в 15 патронов в секунду. Если вокруг 10 объектов. Ладно один стреляет, а если двое - то уже "уопа". Это получается на каждую пулю, будет просчёт, при этом жизнь пули примерно 50мс (например), то количество просчётов просто нарастает с каждым выстрелом. При фиксированном цикле в 19мс (60ups), будет 60 обновлений, при этом жизнь пули примерно 3 цикла. Получается в итоге (15*1)*10*3=450, вычислений в секунду, от одного пулемётчика. А что если их 32, и они все стреляют в один момент? (15*32)*32*3=46080 вычислений в секунду! Этож полнейшая уопа. Поэтому обязательные оптимизации в первую очередь разбиение глобального списка по секторам. (это не только к пулям относится). Далее другие оптимизации, сокращения списков, для индор, это порталы. Также для больших пространств, и большого количества объектов, нужно кластеровать сектора.. Короче говоря, пока у вас бегает кое как 10 мобов, и стрельба медленная, но как только что-то увеличивается, по геометрической прогрессии вырастает нагрузка вычислений. Логика никогда не должна утеснять рендер, даже на слабых параметрах компьютера (это же не симулятор чястиц галактик с их звёздами и планетами, это простая игра). Тем более, где сейчас встретишь игру, в которой требования к железу, будут выше на процессор, или ваш процессор вас "подведёт?" (в разумных ситуациях), нету такого. Оптимизации нужны, но согласен, автор ещё не совсем готов к ним.. |
Ответ: Метод попадания пуль
Цитата:
|
Ответ: Метод попадания пуль
Цитата:
А создал я етот топик, не потому что собираюсь камеры в пули пхать: Цитата:
Цитата:
Ну и относительно темы пару слов :-D Насчет количества стреляемых я уже говорил: Цитата:
А насчет деления карты, я например так понимаю. Есть карта 300х300(например). По ней ездят толпами танки. Нам нужно поделить всю карту на кубики типа 10х10(например) и призначить им свой ID. Выходит 30 кубиков с ID от 1 до 30. Мы берем всем танкам и пулям назначаем тот ID в кубике которого они находятся. И так у нас получается группа пуль и танков с одинаковым ID какие мы и проверяем между собой на попадание не трогае все остальные танки с другими ID. Надеюсь я правильно понимаю?:4to: |
Ответ: Метод попадания пуль
Цитата:
http://www.forum.boolean.name/showthread.php?t=13361 |
Ответ: Метод попадания пуль
в Cortex Command играл? Мы в четвером резались за одной клавой...значит можно :)
|
Часовой пояс GMT +4, время: 10:20. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot