GLScene

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
GLScene
Glscene-logo.png
GLSceneDesignTimeEditor.jpg
Интерфейс GLScene
Тип

Графический движок

Разработчик

Mike Lischke (первоначальный автор), Eric Grange (нынешний maintain'ер)

Написана на

Delphi, FreePascal

Операционная система

Кроссплатформенное программное обеспечение

Последняя версия

1.1 (22 августа 2010 года)

Тестовая версия

SVN revision 5991 (17 ноября 2011 года)

Лицензия

Mozilla Public License 1.1

Сайт

glscene.sourceforge.net/wikka/HomePage

GLScene — графический движок, написанный для создания графических приложений на языках программирования Delphi, Free Pascal и C++, использующий библиотеку OpenGL в качестве интерфейса программирования приложений. GLScene является свободным программным обеспечением и распространяется с лицензией Mozilla Public License. С его помощью программирование трёхмерной графики становится более простым и быстрым. Последние версии движка также доступны для использования в Lazarus.

Разработка данного движка началась в 1999 году Майком Лишке[1], а с версии 0.5 была выложена с открытым исходным кодом и передана на попечение администратору проекта Эрику Гранже. В настоящий момент версия движка имеет номер 1.2.0.x, он избавился от массы ошибок, пополнился новыми функциями и стал быстрее благодаря различным оптимизациям.

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’ов, прикреплённых друг к другу, можно создавать сложные пространственные конструкции, как, например, скелет, в котором кости прикриплены друг к другу. Кроме того TGLDummyCube удобен для использования в качестве целевого объекта камеры TGLCamera.

TGLMaterialLibrary — библиотека материалов. Находящиеся в ней материалы переносятся в видеопамять видеокарты. Все материалы могут использоваться разными объектами GLScene одновременно. Каждый материал может иметь свою текстуру или использовать текстуры других материалов со своими настройками её отображения. Таким образом, например, загрузив текстуру машины зелёного цвета, можно использовать её в другом материале, но изменив её цвет на, скажем, синий.

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 — коэффициент изменения яркости от центральной точки пятна прожектора до его краёв.

Прожекторы часто используются в качестве фар автомобилей или фонариков в руках героя в играх.

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]