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

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

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

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

Поддержка мешей в dmech

В dmech возвращена поддержка статических полигональных мешей. Она существовала и ранее, но ее на долгое время пришлось убрать по причине несовместимости с нынешней архитектурой движка – сейчас, наконец-то, ее код удалось адаптировать.
Проверка столкновений с полигонами основана на все том же алгоритме MPR, но с оптимизацией за счет разбиения пространства (а именно, используется одна из разновидностей BVH – иерархии ограничивающих объемов).
Поддерживается проверка столкновений меша с любыми выпуклыми телами (включая боксы, цилиндры, конусы и т.д.) Единственное ограничение – в настоящее время полигональные меши могут быть только статичными телами.

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

Обновление dmech

В физическом движке dmech реализована новая система кэширования контактов (persistent contact manifold), которая во многих случаях делает симуляцию более точной и правдоподобной.
Также обновлен репозиторий dmech на GitHub. Кроме свежих изменений в кодовой базе самого движка, добавлены исходники демонстрационного приложения на основе OpenGL и SDL.

Составные тела в dmech

В физическом движке dmech реализованы составные тела (поддержка нескольких геометрий на тело). Корректировка позиции теперь основана на псевдоскоростях. Кроме того, устранен артефакт дрожания (jittering), возникающий в некоторых ситуациях.
Также dmech теперь использует последнюю версию dlib.

Сборка для Windows
Сборка для Linux
Исходники

Репозиторий на GitHub будет обновлен в ближайшее время.

Редактор уровней для Atrium

После долгого перерыва я вновь возвращаюсь к работе над Atrium. Будущей игре нужны инструменты для подготовки контента, и я решил начать с редактора уровней. Конечно, в качестве редактора уровней можно было использовать один из существующих 3D-пакетов – например, Blender – но я отказался от этой идеи по следующим соображениям:

  • Blender “заточен” под моделирование, а не сборку сцен из готовых моделей. Нет встроенной системы ассетов, библиотеки материалов и т.д.;
  • В существующих программах нет возможности создавать новые классы объектов с нестандартными свойствами и функциональностью, специализированные для конкретного игрового движка;
  • Нет полноценного WYSIWYG, в то время как в собственном редакторе уровней используется графический движок от своей же игры, и картинка в редакторе совпадает с картинкой в игре;
  • Собственный редактор можно распространять параллельно с игрой, на тех же лицензионных условиях, а сторонний инструмент – не всегда.

Для разработки редактора я, как обычно, использую D и OpenGL, а в качестве тулкита – GTK+ (через биндинг GtkD). Планируется выпустить версии для Linux и Windows.