При разработке приложения иногда возникает необходимость в создании трёхмерной визуализации. Например, это может быть отрисовка трёхмерной поверхности с наложенной текстурой или отображение трёхмерной модели детали или сборочной единицы проектируемого изделия. Помимо визуализации, пользователю следует предоставить функционал для интерактивного взаимодействия с моделью — возможность вращать, приближать и перемещать её в области просмотра.
С этой задачей в Lazarus IDE может справиться компонент трехмерного игрового движка Castle Game Engine — это кроссплатформенный игровой движок с открытым исходным кодом для 3D и 2D-игр, cо своим визуальным редактором и поддержкой Pascal API. Сам движок поддерживает множество форматов файлов моделей, таких как glTF, X3D, WRL и Spine, и может работать на различных платформах.
Добавление компонентов движка в Lazarus IDE
Добавление компонентов Castle Game Engine можно осуществить двумя основными способами.
Первый способ установки заключается в использовании встроенного диспетчера пакетов Lazarus IDE. Для этого в главном меню необходимо выбрать пункт «Пакет» → «Сетевой диспетчер пакетов».
-
Второй вариант (позволяет установить самые свежие версии) - это скачивание дистрибутива Castle Game Engine с официального github репозитория, и добавление пакетов в Lazarus IDE с помощью Castle Game Engine editor.
Редактор располагается вbin\castle-editor.exe
, в настройках диалогового окна редактора, необходимо указать местоположение FPC и Lazarus (если они не были определены автоматически) и зарегистрировать пакеты Castle Game Engine.
После регистрации, установка пакетов возможна с помощью пункта меню Пакеты → Установить/удалить пакеты.
В перечне доступных для установки компонентов, необходимо выбрать:castle_base 6.xx
castle_components 6.xx
castle_editor_components 6.xx
После установки пакетов, IDE будет пересобрана, и в панели инструментов появится вкладка Castle с компонентами, которые можно разместить на форме.
Использование компонентов движка
Движок включает множество различных компонентов, и детальную информацию по работе с ними можно найти в учебных материалах от автора, размещённых в разделе документации на официальном сайте. Чтобы отображать графику, на форму приложения необходимо добавить экземпляр компонента TCastleControl. Я обычно присваиваю ему имя Browser.
Кроме того, необходимо выполнить инициацию базовых компонентов: сцены (Scene), области просмотра (ViewPort) и механизма навигации (Navigation).
Пример кода инициации (код можно добавить в событие на создание формы) приведен ниже:
Scene := TCastleScene.Create(Application);
Viewport := TCastleViewport.Create(Application);
Viewport.FullSize := true;
Viewport.Camera.Add(TCastleDirectionalLight.Create(Self));
Browser.Controls.InsertFront(Viewport);
Navigation := TCastleExamineNavigation.Create(Self);
Viewport.InsertFront(Navigation);
После инициации, можно будет генерировать или загружать модель в сцену, где она уже будет отображаться.
Несколько слов о 3D-моделях в формате X3D
Формат X3D - является открытым стандартом для представления и отображения трехмерных данных. Он поддерживает широкий набор функций таких, как анимация, интерактивность, текстурирование, освещение и создание сценариев, он основан на том же синтаксисе XML, что и SVG, что делает его удобным для чтения и редактирования программным способом.
X3D является прямым надмножеством VRML - языка моделирования виртуальной реальности. Формат имеет несколько кодировок, что обеспечивает гибкость его использования и совместимость с различными системами:
XML-тип (.x3d) — основной формат, работающий с XML.
Классическая VRML-тип (.x3dv) — предназначен для работы с предыдущими версиями VRML.
VRML97-кодировка (.wrl) — старый, но все еще используемый формат, который поддерживает рендеринг трехмерной графики.
JavaScript Object Notation (JSON) — текстовый формат, удобный для передачи данных.
Разработка и поддержка формата X3D осуществляется консорциумом Web3D — международной организацией, нацеленной на продвижение открытых стандартов трехмерной графики в интернете. Консорциум Web3D предлагает различные ресурсы, примеры, учебные материалы и инструменты как для пользователей, так и для разработчиков X3D.
Посмотреть примеры моделей X3D и различные сценарии их использования можно в разделе примеры страницы документации, а изучить внутреннее устройство и поиграться с параметрами можно с помощью онлайн редактора - Playground | X_ITE X3D Browser.
Генерация X3D модели в коде приложения
Для генерации моделей удобно использовать возможности стандарта, касающиеся CAD геометрии. Примеры таких CAD-моделей можно найти на странице ресурса Basic X3D Examples Archive, CAD.
Внутри движка работа по генерации модели связана с созданием узлов X3D (X3D nodes) — это своего рода граф сцены движка. Как только вы загружаете 3D или 2D модель в TCastleScene (независимо от того, в формате X3D или в каком-либо другом, например, glTF), то внутри появляется граф узлов X3D. Корень этого графа доступен как экземпляр TCastleSceneCore.RootNode. Работа с узлами X3D достаточно детально описана в документации, на странице движка - Scene Graph: X3D nodes.
Дабы не делать работу дважды
Для некоторых случаев стоит рассмотреть вариант работы, когда модель строится с помощью API CAD-программы, например, КОМПАС-3D, а в окне приложения отображается результат загруженный из WRL-модели, сохранной средствами КОМПАС-3D.
Скорость работы такого варианта, конечно, оставляет желать лучшего но, для небольших проектов такой вариант вполне годится. А для серьезных проектов лучше использовать ядро C3D — на котором собственно и работает КОМПАС-3D.