GLScene
| GLScene | |
|---|---|
| |
| Интерфейс GLScene | |
| Тип | Графический движок |
| Разработчики | Mike Lischke (первоначальный автор), Eric Grange (основной разработчик с 2000 по 2005 год), другие |
| Написана на | Delphi, FreePascal, C++ |
| Операционная система | Кроссплатформенное программное обеспечение |
| Последняя версия | 2.2 (10 февраля 2023 года) |
| Репозиторий |
svn.code.sf.net/p/glscen… github.com/GLScene/GLSce… |
| Лицензия | Mozilla Public License 2.0 |
| Сайт | glscene.sourceforge.net |
GLScene — графический движок для создания кросс-платформенных приложений на языках программирования Delphi, Free Pascal и C++, использующий библиотеку OpenGL в качестве интерфейса программирования приложений. GLScene является свободным программным обеспечением и распространяется с лицензией Mozilla Public License. С его помощью программирование трёхмерной графики в Windows становится более простым и быстрым. Последние версии движка также доступны в среде программирования Lazarus для создания приложений для Linux, MacOS и мобильных операционных систем.
Разработка данного движка началась в 1997 году Майком Лишке[1] и версия 0.5 была выложена с открытым исходным кодом. Дальнейшее развитие GLScene было продолжено Эриком Гранжем, а после 2006 года поддерживается командой разработчиков. Поддержка языка C++, юникода, работы на платформе Windows 64, переход с Subversion на Git, создание зеркал SourceForge репозитория на GitHub и GitFlic, а также разработка и выпуск новых версий с 2011 по 2023 год выполнялись Павлом Васильевым, администратором vassiliev [2]. В настоящий момент движок пополнился новыми функциями работы с полигональными объектами, вокселами и шейдерами, стал быстрее благодаря различным оптимизациям кода.
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 — коэффициент изменения яркости от центральной точки пятна прожектора до его краёв.
Прожекторы часто используются в качестве фар автомобилей или фонариков в руках героя в играх.
Примечания
[править | править код]- ↑ Soft Gems Homepage. Дата обращения: 2 июня 2007. Архивировано 30 июня 2007 года.
- ↑ vassiliev / Profile. Дата обращения: 31 мая 2023. Архивировано 31 мая 2023 года.
Ссылки
[править | править код]- Сайт GLScene
- Графический движок GLScene на SourceForge
- GLScene Engine на GitHub
- GLScene Engine на GitFlic
- Официальный форум GLScene*
- Установка GLScene под Lazarus
- Галерея — сборник «больших» демонстрационных программ, показывающих возможности GLScene
