0

Я занимаюсь простым 3D-симулятором твердого тела, и я пришел в точку, где мне нужно обрабатывать столкновения между объектами. До сих пор использование новой DirectXMath вместе с SimpleMath DirectXTK было огромной помощью.DirectXCollision - любой способ получить больше информации о перекрестке?

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

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

+2

Я бы изучил что-то вроде [BulletPhysics Library] (http://bulletphysics.org/wordpress/), которое [описано здесь] (http://bulletphysics.org/Bullet/BulletFull/index.html) –

+0

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

ответ

1

Да и нет.

С помощью DirectX math lib вы можете получить сведения о пересечении очень примитивных форм с очень примитивными формами, такими как plane-line, plane-plane, треугольный самолет. Но у вас есть только основные («истина, ложь» или «-1, 0, 1») информация о более сложных перекрестках, таких как луч коробка, коробки коробка и т.д.

Таким образом, решения:

  • вы можете развернуть свои собственные функции пересечения для ящиков, основанных на примитивах библиотеки математики DirectX. Вы изобретете колесо (частично), но это позволит вам сохранить существующий код расчета нетронутым. Не так много кода, но вам потребуется интенсивно использовать очки для алгоритмов и наизусть знать MSDN ref. Наконец, это может быть действительно уродливо.
  • вы можете использовать другую библиотеку, такую ​​как Bullet, где доступно множество типов пересечений прямо сейчас. Они уже отлажены и готовы к работе. Но вам, вероятно, придется вырвать весь ваш математический код DirectX с грязными кишками, если он будет глубоко интегрирован.
  • вы можете сделать что-то вроде тонкого слоя абстракции (адаптера) к существующему интерфейсу. Вы сможете быстро поменять любую реализацию, которая вам нравится, сейчас или в будущем. Но это должно быть сделано разумным образом, поскольку такой дополнительный уровень косвенности может замедлить вашу сверхбыструю математику. Это довольно много кодирования, а затем отладка и боль, но это того стоит.

Надеюсь, что это поможет. Счастливое кодирование! ;)

+0

Спасибо, Drop. Я думаю, что я поеду с последним маршрутом и подключу Bullet на данный момент для обнаружения пересечения и, возможно, позже скрою свой собственный. – Valentin