пятница, 2 августа 2013 г.

Lazarus World. Инициализация ZenGL


Внимание! Используется Lazarus 1.0.8 под управлением Fedora 19 Linux.
В первую очередь нам необходимо скачать, и установить библиотеку ZenGL. Скачать библиотеку можно с официального сайта в разделе Download (http://zengl.org/download.html). На момент написания статьи доступна версия 0.3.11. Нам необходимо скачать файл zengl-src-[номер версии].7z. Распакуйте данный архив в удобное для вас место на жестком диске. Например, у меня это каталог /home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11. Давайте посмотрим на содержимое каталога zengl-src-0.3.11. Из всех каталогов, которые нас интересуют, это каталог extra – содержит дополнительные модули, headers – содержит заголовочные модули, lib – содержит объектные файлы различных библиотек, src – исходные файлы библиотеки ZenGL, которые мы будем подключать к нашему проекту.

Переходим к подключению библиотеки ZenGL к нашему проекту в среде Lazarus. В среде Lazarus создадим новый проект. Для этого выберем пункт меню File(Файл) -> New(Создать), откроется диалог создание нового проекта. В диалоге создания нового проекта выберите раздел Project(Проект) > Program(Программа) и нажмите кнопку Ok.

Сохраните проект, например в каталоге /home/[имя пользователя]/Projects/lazarus/zengl_p1. Для этого выберите пункт меню File(Файл) > Save As(Сохранить как). Присвойте проекту имя zengl_p1.lpi. Далее в свойствах проекта, пункт меню Project(Проект) > Project Options(Параметры проекта), выберите раздел Compiler Options(Параметры компилятора) > Paths(Пути). В поле Other unit files (-Fu)(Другие модули (-Fu)) нужно указать следующие пути до модулей ZenGL:

/home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11/headers/
/home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11/extra/
/home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11/src/
/home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11/lib/zlib/$(TargetCPU)-$(TargetOS)/
/home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11/lib/zip/$(TargetCPU)-$(TargetOS)/
/home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11/lib/theora/$(TargetCPU)-$(TargetOS)/
/home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11/lib/msvcrt/$(TargetCPU)/
/home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11/lib/jpeg/$(TargetCPU)-$(TargetOS)/
/home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11/lib/ogg/$(TargetCPU)-$(TargetOS)/
Рисунок 1. Подключение модулей
В поле Include files (-Fi)(Включаемые файлы (-Fi)) нужно указать следующие пути:
/home/[имя пользователя]/lazarus/zengl/zengl-src-0.3.11/headers/
Рисунок 2. Подключение заголовочных модулей
 
Теперь перейдем к написанию кода. В только что созданном новом проекте будет присутствовать начальный код, который надо очистить и оставить только следующий код:

program zengl_p1;
begin
end.
В коде, после названия программы, напишем секцию uses со следующими подключаемыми модулями:
uses zgl_main, zgl_screen, zgl_window, zgl_timers, zgl_utils;
Ниже секции uses напишем пять процедур – заглушек:
В данной процедуре пишется код, который выполнится после создания окна и создания контекста OpenGL
procedure Init;
begin
end;
Процедура, в которой выполняется прорисовка экрана на каждой итерации главного цикла
procedure Draw;
begin
end;
Процедура, которая выполняется каждый раз перед перерисовкой экрана на каждой итерации главного цикла.
procedure Update( dt: Double );
begin
end;
Процедура, которая выполняется каждый раз через установленный интервал времени. В данном случае, каждую секунду в заголовке окна будет меняться значение FPS.
procedure Timer;
begin
 wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
end;
Процедура, которая выполняется перед очисткой ресурсов, уничтожения окна и контекста OpenGL
procedure Quit;
begin
end;
Внутри главных операторных скобок необходимо написать следующий код:
Установка процедуры таймера с именем Timer с интервалом 1000 миллисекунд
timer_Add( @Timer, 1000 );
Регистрация процедуры Init
zgl_Reg( SYS_LOAD, @Init );
Регистрация процедуры Draw
zgl_Reg( SYS_DRAW, @Draw );
Регистрация процедуры Update
zgl_Reg( SYS_UPDATE, @Update );
Регистрация процедуры Quit
zgl_Reg( SYS_EXIT, @Quit );
Первоначальное значение заголовка окна
wnd_SetCaption( '01 - Initialization' );
Отобразим курсор
wnd_ShowCursor( TRUE );
Установим опции окна
scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
Инициализация библиотеки ZenGL
zgl_Init();
Ниже показан результат работы программы.
  Рисунок 3. Результат работы программы

Код полностью:
program zengl_p1;

uses   zgl_main, zgl_screen, zgl_window, zgl_timers, zgl_utils;

procedure Init;
begin

end;

procedure Draw;
begin

end;

procedure Update( dt: Double );
begin

end;

procedure Timer;
begin
     wnd_SetCaption( '01 - Initialization[ FPS: '
+ u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
end;

procedure Quit;
begin

end;

begin
  timer_Add( @Timer, 1000 );

  zgl_Reg( SYS_LOAD, @Init );
  zgl_Reg( SYS_DRAW, @Draw );
  zgl_Reg( SYS_UPDATE, @Update );
  zgl_Reg( SYS_EXIT, @Quit );
  wnd_SetCaption( '01 - Initialization' );
  wnd_ShowCursor( TRUE );
  scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
  zgl_Init();
end.



syntax highlighted by Code2HTML, v. 0.9.1

Комментариев нет:

Отправить комментарий