ZenGL Tutorial/ru
│
Deutsch (de) │
English (en) │
español (es) │
français (fr) │
русский (ru) │
ZenGL/ru |
Tutorial 1 |
Tutorial 2 |
Tutorial 3 |
Edit
Скачать
ZenGL для Linux, Windows и Mac можно скачать тут.
Установка
Для инсталляции достаточно распаковать скачанный архив в удобную директорию.
Настройка путей
Перед использованием модулей не забудьте добавить в пути к исходным кодам путь к исходникам ZenGL
Откройте "Project > Project Options". В "Compiler Options > Paths" добавьте путь к "Other Unit Files":
<delphi>headers extra src src\Direct3D lib\jpeg\$(TargetCPU)-$(TargetOS) lib\msvcrt\$(TargetCPU) lib\ogg\$(TargetCPU)-$(TargetOS) lib\zlib\$(TargetCPU)-$(TargetOS)</delphi>
Сборка
Приложение можно собрать с ZenGL статически либо с использованием динамических библиотек (so/dll/dylib).
Подробнее можно прочесть в compilation на ZenGL Wiki.
Статическая сборка: <delphi>{$DEFINE STATIC}</delphi> Сборка с использованием загружаемых библиотек: <delphi>//{$DEFINE STATIC}</delphi>
Windows DLL
Откройте "src\Lazarus\ZenGL.lpi" а потом: "Run > Compile (Ctrl + F9)".
После, в директории "src\" вы можете увидеть файл "ZenGL.dll": скопируйте его в директорию "bin\i386" При использовании динамической линковки, вам придется постоянно копировать DLL в выходную директорию проекта.
Первая программа
Сперва, создайте новое приложение Free Pascal ("Free Pascal Program"), измените пути к исходным кодам, как было указано выше. Также, смените Syntax Mode в Project > Project Options > Compiler Options > Parsing на Delphi (-Mdelphi). Запомните: если вы используете динамическую линковку (so/dll/dylib), скопируйте необходимые библиотеки в директорию выполнения программы.
Добавьте ресурсы, назовите программу: <delphi>program demo01;
{$R *.res}</delphi>
Выберите режим компиляции, для использования so/dll/dylib: <delphi>{$DEFINE STATIC}</delphi>
Добавьте модули ZenGL. <delphi>uses
{$IFNDEF STATIC} zglHeader {$ELSE} zgl_main, zgl_screen, zgl_window, zgl_timers, zgl_utils {$ENDIF} ;</delphi>
Задаем переменные: <delphi> var
DirApp : String; DirHome : String;</delphi>
...Процедуры:: <delphi>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;</delphi>
Вот начало программы: <delphi>Begin
{$IFNDEF STATIC} zglLoad( libZenGL ); {$ENDIF} // Для загрузки/создания каких-то своих настроек/профилей/etc. можно получить путь к // домашенему каталогу пользователя, или к исполняемому файлу(не работает для GNU/Linux). DirApp := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) ); DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );
// Создаем таймер с интервалом 1000мс. timer_Add( @Timer, 1000 );
// Регистрируем процедуру, что выполнится сразу после инициализации ZenGL. zgl_Reg( SYS_LOAD, @Init ); // Регистрируем процедуру, где будет происходить рендер. zgl_Reg( SYS_DRAW, @Draw ); // Регистрируем процедуру, которая будет принимать разницу времени между кадрами. zgl_Reg( SYS_UPDATE, @Update ); // Регистрируем процедуру, которая выполнится после завершения работы ZenGL. zgl_Reg( SYS_EXIT, @Quit ); // Т.к. модуль сохранен в кодировке UTF-8 и в нем используются строковые переменные // следует указать использование этой кодировки. zgl_Enable( APP_USE_UTF8 );
// Устанавливаем заголовок окна. wnd_SetCaption( '01 - Initialization' );
// Разрешаем курсор мыши. wnd_ShowCursor( TRUE );
// Указываем первоначальные настройки. scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
// Инициализируем ZenGL. zgl_Init();
End.</delphi>
Результат
Наш результат - шаблон для проектов ZenGL: <delphi>program template;
{$DEFINE STATIC}
{$R *.res}
uses
{$IFNDEF STATIC} zglHeader {$ELSE} zgl_main, zgl_screen, zgl_window, zgl_timers, zgl_utils {$ENDIF} ;
var
DirApp : String; DirHome : String;
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
{$IFNDEF STATIC} zglLoad( libZenGL ); {$ENDIF} DirApp := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) ); DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) ); timer_Add( @Timer, 1000 ); zgl_Reg( SYS_LOAD, @Init ); zgl_Reg( SYS_DRAW, @Draw ); zgl_Reg( SYS_UPDATE, @Update ); zgl_Reg( SYS_EXIT, @Quit ); zgl_Enable( APP_USE_UTF8 ); wnd_SetCaption( '01 - Initialization' ); wnd_ShowCursor( TRUE ); scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE ); zgl_Init();
End.</delphi>