GLScene — графический движок для создания кросс-платформенных приложений на языках программирования Delphi, Free Pascal и C++, использующий библиотеку OpenGL в качестве интерфейса программирования приложений. GLScene является свободным программным обеспечением и распространяется с лицензией Mozilla Public License. С его помощью программирование трёхмерной графики в Windows становится более простым и быстрым. Последние версии движка также доступны в среде программирования Lazarus для создания приложений для Linux, MacOS и мобильных операционных систем.
Разработка данного движка началась в 1997 году Майком Лишке и версия 0.5 была выложена с открытым исходным кодом. Дальнейшее развитие GLScene было продолжено Эриком Гранжем, а после 2006 года поддерживается командой разработчиков. Поддержка языка C++, юникода, работы на платформе Windows 64, переход с Subversion на Git, создание зеркал SourceForge репозитория на GitHub и GitFlic, а также разработка и выпуск новых версий с 2011 по 2023 год выполнялись Павлом Васильевым, администратором vassiliev . В настоящий момент движок пополнился новыми функциями работы с полигональными объектами, вокселами и шейдерами, стал быстрее благодаря различным оптимизациям кода.
GLScene позволяет программистам создавать 3D-объекты OpenGL в design-time с использованием интерфейса, показанного на картинке. Большое количество объектов и дополнительных визуальных компонентов VCL помогает программистам создавать графические 3D-приложения для Delphi, C++Builder и Lazarus.
Загружаемые форматы файлов моделей: 3ds, obj, vrml, smd, md2, md3, nmf, oct, lwo, b3d, gl2, gls, ms3d, Nurbs, lod, и некоторые другие.
Сохраняемые форматы файлов моделей: glsm, obj и smd.
Поддерживаемая физика: ODE, Newton Game Dynamics. Также есть небольшой собственный движок расчёта столкновений с учётом законов сохранения импульса DCE.
Некоторые объекты GLScene
TGLCamera — объект камера. Это точка, из которой смотрят на трёхмерный мир. Камере можно задавать положение и целевой объект, на который она смотрит. Варьируя её параметр FocalLength, можно изменять фокусное расстояние камеры. Параметры DepthOfView и NearPlaneBias отсекают дальние и ближние объекты. Отсечение дальних объектов может сильно повысить скорость работы.
Таким образом, поле зрения камеры — это усечённый конус, ограниченный с обеих сторон параметрами DepthOfView и NearPlane, угол которого задан через параметр FocalLength.
TGLSceneViewer — объект для визуализации трёхмерного мира. Его нужно кинуть на форму и установить ему свойство Camera, то есть указав камеру, с которой надо смотреть на мир. После этого он будет показывать то, что видит указанная камера.
TGLDummyCube — объект, не содержащий графики, но имеющий позицию (position), ротацию в виде векторов направления (direction) и верха (up) и масштаб (scale). При помощи этих свойств объекту можно придавать различные положения в пространстве. А используя несколько TGLDummyCube’ов, прикреплённых друг к другу, можно создавать сложные пространственные конструкции, как, например, скелет, в котором кости соединены друг с другом суставами или сочленениями (joints). Кроме того TGLDummyCube удобен для использования в качестве целевого объекта камеры TGLCamera.
TGLMaterialLibrary — библиотека материалов, загружаемых в видеопамять для совместного использования объектами сцены. Позволяет применять одну текстуру в разных материалах с индивидуальными настройками отображения (например, изменением цвета).
TGLFreeForm — статичная трёхмерная модель. Используется, чтобы загрузить, например, здания, ландшафты, деревья и прочие подобные объекты. Чтобы загрузить 3D-модель в GLScene достаточно двух строчек кода: // Указываем какую библиотеку материалов использовать. GLFreeForm1.MaterialLibrary := GLMaterialLibrary1; // Загружаем 3D-модель. GLFreeForm1.LoadFromFile('mymodel.3ds'); Также надо добавить в uses модуль загрузчика моделей. Для моделей 3ds это GLFile3DS, для моделей smd — GLFileSMD, по аналогии. После загрузки модель полностью попадает в видеопамять, и процессорное время на её отображение практически не тратится. При изменении матрицы этого объекта, в видеопамять пересылается только новая матрица.
TGLActor — трёхмерная модель с анимацией. Используется для загрузки моделей людей, монстров, других движущихся объектов. Загрузка аналогична загрузке модели в TGLFreeForm. Чтобы запустить анимацию достаточно двух строчек. // Грузим модель со скелетной анимацией 'mymodel.smd'. GLActor1.LoadFromFile('mymodel.smd'); // Добавляем анимацию ходьбы из файла 'walk.smd'. GLActor1.AddDataFromFile('walk.smd'); // Переключаемся на анимацию ходьбы 'walk'. GLActor1.SwitchToAnimation('walk'); // Запускаем проигрывание анимации в циклическом режиме. GLActor1.AnimationMode := aamLoop; В отличие от моделей, находящихся в TGLFreeForm, здесь рендеринг частично возложен на центральный процессор. Когда происходит изменение позиции модели со скелетной анимацией, то для каждого положения каждой кости в каждый момент времени происходит перерасчёт положения вершин модели, после чего они пересылаются в видеопамять и отображаются на экране. Этот подход более медленный, но зато позволяет добиться практически идеальной плавности движений.
TGLPoints — позволяет рисовать на экране точки. Добавлять точки нужно в список Positions. Чтобы точки были цветными, нужно добавлять цвета в список Colors. Если в него добавлен только один цвет, то все точки будут этого цвета. Если количество цветов равно количеству точек, то каждая точка будет своего цвета.
TGLLines — позволяет рисовать линии и сплайны. Линии задаются точками, добавлять которые можно в список Nodes через процедуру NodesAdd. Линии по заданным точкам рисуются в зависимости от способа отображения LineSplineMode. Если это lsmSegments, то каждые две точки означают отдельную линию. Если lsmLines, то линии проводятся от точки к точке. Если какой-то другой режим, то по точкам рисуется сплайн, то есть плавная линия, проходящая через все заданные точки. Плавность линии зависит от параметра Division. Чем он больше, тем линия плавнее. Если в опции LinesOption включён параметр loUseNodeColorForLines, то для каждой точки линии можно будет использовать свой цвет. Цвета задаются в NodeColor.
Также есть возможность выделять разными способами точки по которым строятся линии. Способ задаётся в параметре LineNodesAspect. lnaInvisible — выделение отсутствует. lnaAxes — выделение осями. lnaCube — выделение кубами lnaDodecahedron — выделение двенадцатигранниками.
TGLLightSource — источник освещения, который освещает всю трёхмерную сцену. Их в OpenGL может быть максимум восемь. Поэтому в GLScene их тоже восемь. Светит данный источник освещения или нет, определяется параметром Shining (светимость).
За цвет освещения отвечают три параметра: Ambient, Diffuse и Specular. Ambient — это общее освещение сцены, не зависящее от положения источника света, как освещённость в тени в солнечный день. Diffuse — направленный свет, зависит от положения источника. То есть, если поверхность отвёрнута от него, то он её не освещает. Specular — зеркальный свет. Зависит ещё и от нормали поверхности. С его помощью можно делать яркие блики, как например яркая точка на железном блестящем шарике от лампочки.
За ослабление яркости света в зависимости от удаления от источника отвечают три параметра: ConstAttenuation, LinearAttenuation, QuadraticAttenuation. Первый — это постоянное ослабление (в общем не зависит от расстояния, а просто можно считать, что управляет яркостью источника света), второй — линейное ослабление, третий — квадратичное.
Источник света может быть прожектором. Для этого его параметр SpotDirection нужно выставить в lsSpot и указать параметры прожектора. SpotDirection — указывает направление света прожектора. SpotCutOff — угол конуса прожектора. Если он равен 180 градусам, то считается, что это не прожектор, а обычный источник освещения. Если меньше 90, то прожектор. SpotExponent — коэффициент изменения яркости от центральной точки пятна прожектора до его краёв.
Прожекторы часто используются в качестве фар автомобилей или фонариков в руках героя в играх.
Примечания
Ссылки
Сайт GLScene Графический движок GLScene на SourceForge GLScene Engine на GitHub GLScene Engine на GitFlic Официальный форум GLScene* Установка GLScene под Lazarus Галерея — сборник «больших» демонстрационных программ, показывающих возможности GLScene
Категория:Графические движки Категория:Свободные игровые движки Категория:Свободное программное обеспечение, написанное на Delphi Категория:Свободное программное обеспечение, написанное на C++ Категория:Программное обеспечение с лицензией MPL