Коллизии в приложении реального мира

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

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

У меня есть 2 типа сетки, для которой я должен сделать коллизии для:

1) Статические Сетки (которые перемещают экран, но не имеют НИКАКОЙ анимации),

2) (Анимированы) покрытые кожей/Очищенные от костей Сетки

На самом деле у меня есть это решение (вполне hacky :|)

В первую очередь, у меня есть тест против некоторого ограничивающего объема, которые включают полную сетку (капсула в моем случае), после:

1) Для статических сеток я делю их вручную на блоки (на разработчике моделей), и для каждого из этих блоков я использую тест sphere/AABB. (хорошо работает, но это немного грязно для разрезания каждой сетки :P) (я попробовал автоматическую систему для деления сетки через плоскости, но это дает плохие результаты :()

2) Для анимированного сетчатого ATM я делю сетку во времени выполнения в x блоки (где x является количеством костей). Каждый блок содержит вершину, для которой та кость является крупным влиятельным лицом. (Иногда работы, иногда дает действительно плохие результаты.:|)

Обратите внимание на то, что деление сетки сделано во время загрузки и не каждый раз, когда (иначе, это работало бы как слайд-шоу :D)

И вот вопрос:

Что самая нормальная идея состоит в том, чтобы использовать для тех 2 случай? Какой-либо материал для меня для изучения этих методов? (с некоторым исходным кодом и объяснениями было бы еще лучше (язык не важен, когда я понимаю алгоритм, внедрение просто)), Может Вы аргумент, почему то решение лучше, чем другие? Я слышал большой разговор о kd-дереве, дереве октантов, и т.д.. в то время как я понимаю их структуру, я пропускаю их утилиту в сценарии обнаружения коллизий.

Большое спасибо за ответы!!!

РЕДАКТИРОВАНИЕ: Попытка найти пример K-медного-зажима с некоторым объяснением в сети. Все еще ничего не нашли.:( Какие-либо подсказки? Мне интересно на том, КАК K-медный-зажим может быть эффективно протестирован с другим типом ограничивающих объемов и т.д...., но документация относительно сети кажется высоко недостатком.:(

16
задан feal87 30 January 2010 в 11:27
поделиться

4 ответа

Наиболее распространенными подходами, используемыми во многих современных играх ААА, являются "k-DOP" упрощенное столкновение для StaticMeshes и упрощенное представление физического тела для SkeletalMeshes.

Если вы ищите в Google "kDOP столкновение" или "политопы дискретной ориентации", вы должны найти достаточное количество ссылок. В основном это ограничительный объем, определенный несколькими плоскостями, которые движутся извне по направлению к сетке, до тех пор, пока не произойдет столкновение треугольников. К" в kDOP определяет, сколько из этих плоскостей используется, и в зависимости от вашей геометрии и вашего "к" вы можете получить действительно хорошие аппроксимации.

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

Если вам нужно столкновение на каждый треугольник, "Теорема разделения оси" - это термин поиска Google по вашему выбору. Это полезно для конкретных случаев, но 75% ваших потребностей в обнаружении столкновений должны быть покрыты вышеупомянутыми методами.

Имейте в виду, что вам, скорее всего, понадобится более высокий уровень отклонения ранних столкновений, чем ограничительный том. Как только у вас будет много объектов в мире, вам нужно будет использовать "пространственное разбиение", чтобы как можно раньше отвергнуть группы объектов от дальнейшего тестирования.

5
ответ дан 30 November 2019 в 22:43
поделиться

Выбрать Книга Christer Ericson , Обнаружение столкновения в реальном времени . Он подробно обсуждает эти проблемы.

При чтении статей, помните, что в реальном игровом приложении вы будете работать в жестких пределах памяти и времени - вы получаете 16,6 мс за рамку, и это все! Так что будьте осторожны из любой статьи или бумаги, которая серьезно не обсуждает память и процессорную площадь своего алгоритма.

2
ответ дан 30 November 2019 в 22:43
поделиться

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

Лучше всего использовать сферы или прямоугольники в качестве ограничивающих томов. Затем, если это обнаружит столкновение, переходите к более сложным методам.

То, к чему я клоню, часто лучше и быстрее. Обертывание ограниченных объемов и разделение сетки дорогостоящее, не говоря уже о сложном. Похоже, вы на правильном пути.

Как и в игровом программировании, существует множество способов обнаружения столкновений. Мой совет был бы простым. Возьмите куб и доведите до совершенства свои действия на нем, тогда в теории вы сможете использовать любую другую модель. Что касается примеров, то я бы проверил gamedev.net, т.к. у них есть несколько замечательных статей. Многое или мое домашнее обнаружение столкновений - это комбинация из множества методов, поэтому я не могу порекомендовать подходящий ресурс.

6
ответ дан 30 November 2019 в 22:43
поделиться

Вопрос ответа допускается до Как точно вам нужно?

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

Игра Физика физики развития полагается на искусство аппроксимации (я скрылся в форумах математики и физических и физических и физических и физических и физических веществ Gamedev.net).

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

3
ответ дан 30 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: