ZenGL Tutorial/ru
Deutsch · English · Español · Français · Русский
Скачать
ZenGL для Linux, Windows и Mac можно скачать тут.
Установка
Для инсталляции достаточно распаковать скачанный архив в удобную директорию.
Настройка путей
Перед использованием модулей не забудьте добавить в пути к исходным кодам путь к исходникам ZenGL
Откройте "Project > Project Options". В "Compiler Options > Paths" добавьте путь к "Other Unit Files":
headers
extra
src
src\Direct3D
lib\jpeg\$(TargetCPU)-$(TargetOS)
lib\msvcrt\$(TargetCPU)
lib\ogg\$(TargetCPU)-$(TargetOS)
lib\zlib\$(TargetCPU)-$(TargetOS)Сборка
Приложение можно собрать с ZenGL статически либо с использованием динамических библиотек (so/dll/dylib).
Подробнее можно прочесть в compilation на ZenGL Wiki.
Статическая сборка:
{$DEFINE STATIC}Сборка с использованием загружаемых библиотек:
//{$DEFINE STATIC}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), скопируйте необходимые библиотеки в директорию выполнения программы.
Добавьте ресурсы, назовите программу:
program demo01;
{$R *.res}Выберите режим компиляции, для использования so/dll/dylib:
{$DEFINE STATIC}Добавьте модули ZenGL.
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}
// Для загрузки/создания каких-то своих настроек/профилей/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.Результат
Наш результат - шаблон для проектов ZenGL:
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.From the Free Pascal wiki, page "ZenGL Tutorial/ru", as it stood on 2020-03-03 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
