Newton

Экспериментирую с интеграцией Newton Dynamics – лучшего на сегодняшний день свободного физического движка с API для C. Специально для этого написал биндинг bindbc-newton.

 

Физика автомобиля на D

Давно мечтал написать собственный автосимулятор, хотя бы простенький. Насколько я знаю, на D ничего подобного никто еще не делал, и вот вам proof-of-concept: с использованием dmech можно реализовать вполне сносную физику автомобиля с моделированием колес и подвески на основе лучей (raycast car).

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

Демка использует модифицированную версию dmech, а также Dagon в качестве графического движка (опять-таки с модификациями, которые совсем скоро войдут в основной репозиторий – к примеру, реализованы тени и шейдерный бэкенд для материалов). Все зависимости включены в архив, кроме dlib 0.11.1. Прилагается сборка для Windows. Можете использовать демку в своих проектах (код доступен под лицензией Boost).

Скачать (9,65 Мб)

Кинематика персонажа

Доступна новая демонстрация работы dmech – на этот раз, на примере игровой кинематики (Character Controller) для игры от третьего лица. Персонаж умеет двигаться и прыгать, взаимодействуя со всеми физическими объектами и тримешем уровня.

Управление:
Стрелки – поворот вправо-влево и движение вперед-назад;
Пробел – прыжок.

Скачать для Windows

Исходники вскоре будут доступны в рамках проекта Atrium.

Raycast

В физическом движке dmech реализована поддержка пересечения тел с лучом (raycast). В качестве алгоритма для этого используется разновидность GJK. На данный момент есть возможность “стрелять” лучом в статические и динамические выпуклые тела, в ближайшем будущем появится также поддержка полигональных мешей.

Все изменения доступны в репозитории dmech на GitHub.

Угловое ограничение в dmech

В физическом движке dmech существенно улучшена реализация ограничений для тел (constraints):

  • Добавлено угловое ограничение (AngleConstraint), которое заставляет два тела принимать один и тот же поворот относительно друг друга;
  • Улучшено ограничение расстояния (DistanceConstraint), которое удерживает тела на определенном расстоянии друг от друга. Теперь можно ограничивать минимальное или максимальное расстояние между телами. Также этот вид ограничения может работать в качестве пружины с задаваемой жесткостью.
  • Комбинация углового и скользящего (Slider) соединений дает призматическое, которое позволяет двум телам скользить вдоль оси между ними, но не позволяет им вращаться относительно этой оси. Также возможны другие комбинации – в будущем в движке планируется реализовать класс составных ограничений.

Все изменения доступны в репозитории dmech на GitHub.