При разработке приложения иногда возникает необходимость в создании трёхмерной визуализации. Например, это может быть отрисовка трёхмерной поверхности с наложенной текстурой или отображение трёхмерной модели детали или сборочной единицы проектируемого изделия. Помимо визуализации, пользователю следует предоставить функционал для интерактивного взаимодействия с моделью — возможность вращать, приближать и перемещать её в области просмотра.

Отрисовка 3D объекта на форме
Отрисовка 3D объекта на форме

С этой задачей в 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, что делает его удобным для чтения и редактирования программным способом.

Интерактивное взаимодействие с 3D объектами
Интерактивное взаимодействие с 3D объектами

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.

Загрузка модели из набора примеров поставляемых с КОМПАС-3D
Загрузка модели из набора примеров поставляемых с КОМПАС-3D

Скорость работы такого варианта, конечно, оставляет желать лучшего но, для небольших проектов такой вариант вполне годится. А для серьезных проектов лучше использовать ядро C3D — на котором собственно и работает КОМПАС-3D.

Комментарии (0)