Этот проект не новый, я его начал два года назад, и здесь буду просто отписываться по дальнейшему прогрессу.
dmech - это трехмерный симулятор динамики твердых тел в реальном времени, полностью написанный на D. Предназначен для использования в игровых движках.
Реализованные возможности:
- Итеративный SI-солвер на основе импульсов с поддержкой двухосевого трения контакта;
- Основные геометрические тела - сфера, бокс, цилиндр, конус, эллипсоид. Выпуклая геометрия задается опорной функцией, поэтому имеется возможность добавлять новые типы тел;
- Поддержка составных тел (нескольких геометрий на тело). Расчет тензоров инерции для составных тел осуществляется по теореме Гюйгенса-Штейнера;
- Проверка столкновений, включающая алгоритм MPR (Minkowski Portal Refinement) и динамический кэш контактов (Persistent Contact Manifold);
- Поддержка произвольных статических полигональных мешей с оптимизацией проверки столкновений на основе иерархии ограничивающих объемов (BVH);
- Простейшие сочленения тел: ограничение расстояния (distance constraint), угловое ограничение (angle constraint), шарнирное сочленение (ball-socket), скользящее (slider);
- Пересечение тел с лучом (raycast). В качестве алгоритма для этого используется разновидность метода Гилберта-Джонсона-Керти (GJK);
- Прямая совместимость с OpenGL.
В качестве математической библиотеки dmech использует dlib. Исходники проекта распространяются по лицензии Boost.
Репозиторий: https://github.com/gecko0307/dmech
Подробнее о истории создания dmech можно почитать в моем блоге и в на форуме Gamedev.ru.
Глубокие оптимизации производительности движка не проводились, но уже сейчас он способен с приемлемым FPS обрабатывать несколько сотен несвязанных тел (я проверял до 1000 тел на железе 2008 года). Конечно, для каких-то сверхзадач вроде симуляции жидкостей на основе частиц он не подходит (все равно без ускорения на GPU такие вещи сейчас уже не делаются), но в играх вроде шутеров ответственность за физику вполне может на себя взять. В будущем планирую добавить необходимые компоненты для реализации физики автомобиля и гонок (сплайновые трассы, convex cast и т.д.)
Демки:
- Составное тело 1
- Составное тело 2
- Пример игровой кинематики с динамическим миром