DirectXCollision - любой способ получить больше информации о пересечении?
Я занимался простым трехмерным симулятором твердого тела и пришел к тому моменту, когда мне нужно обрабатывать столкновения между объектами. До сих пор использование нового DirectXMath вместе с DirectXTK SimpleMath было огромной помощью.
Я использовал классы BoundingBox и BoundingOrientedBox из библиотеки DirectXCollision, и они отлично подходят для определения, пересекаются ли два объекта, но не дают больше никакой информации, кроме этого. Мне нужно иметь возможность находить точки соприкосновения и нормали пересечения, чтобы правильно рассчитать реакцию твердого тела.
У меня вопрос - есть ли способ извлечь эту информацию с помощью библиотек DirectX или я должен изучить ее и реализовать свой собственный подход?
1 ответ
И да и нет.
С помощью математической библиотеки DirectX вы можете получить детали пересечения о пересечении очень примитивных фигур с очень примитивными формами, такими как плоскость, плоскость, треугольник и плоскость. Но у вас есть только базовая ("истина, ложь" или "-1, 0, 1") информация о более сложных пересечениях, таких как ray-box, box-box и т. Д.
Итак, решения:
- Вы можете развернуть свои собственные функции пересечения для блоков на основе примитивов математической библиотеки DirectX. Вы заново изобретаете колесо (частично), но это позволит вам не трогать существующий код расчета. Не так уж много кода, но вам нужно будет интенсивно использовать goggle для алгоритмов и знать MSDN ref наизусть. Наконец, это может быть действительно ужасно.
- Вы можете использовать другую библиотеку, такую как Bullet, где сейчас доступно множество типов пересечений. Они уже отлажены и готовы к работе. Но вам, вероятно, нужно будет вычеркнуть весь ваш математический код DirectX из грязной кишки, если он был глубоко интегрирован.
- Вы можете сделать что-то вроде тонкого слоя абстракции (адаптера) к существующему интерфейсу. Вы сможете быстро поменять любую реализацию, которая вам нравится, сейчас или в будущем. Но это должно быть сделано разумно, так как такой дополнительный уровень косвенности может замедлить вашу сверхбыструю математику. Это в значительной степени кодирование, а затем отладка и боль, но оно того стоит.
Надеюсь, это поможет как-то. Удачного кодирования!;)