Difference between revisions of "ZenGL Tutorial/ru"
m (Fixed syntax highlighting; deleted category included in page template) |
|||
(6 intermediate revisions by 4 users not shown) | |||
Line 17: | Line 17: | ||
Откройте "''Project > Project Options''". В "''Compiler Options > Paths''" добавьте путь к "''Other Unit Files''": | Откройте "''Project > Project Options''". В "''Compiler Options > Paths''" добавьте путь к "''Other Unit Files''": | ||
− | < | + | <syntaxhighlight lang=pascal>headers |
extra | extra | ||
src | src | ||
Line 24: | Line 24: | ||
lib\msvcrt\$(TargetCPU) | lib\msvcrt\$(TargetCPU) | ||
lib\ogg\$(TargetCPU)-$(TargetOS) | lib\ogg\$(TargetCPU)-$(TargetOS) | ||
− | lib\zlib\$(TargetCPU)-$(TargetOS)</ | + | lib\zlib\$(TargetCPU)-$(TargetOS)</syntaxhighlight> |
== Сборка == | == Сборка == | ||
Line 30: | Line 30: | ||
Приложение можно собрать с ZenGL статически либо с использованием динамических библиотек (so/dll/dylib). | Приложение можно собрать с ZenGL статически либо с использованием динамических библиотек (so/dll/dylib). | ||
− | Подробнее можно прочесть | + | Подробнее можно прочесть в [http://zengl.org/wiki/doku.php?id=compilation compilation] на [http://zengl.org/wiki/ ZenGL Wiki]. |
Статическая сборка: | Статическая сборка: | ||
− | < | + | <syntaxhighlight lang=pascal>{$DEFINE STATIC}</syntaxhighlight> |
Сборка с использованием загружаемых библиотек: | Сборка с использованием загружаемых библиотек: | ||
− | < | + | <syntaxhighlight lang=pascal>//{$DEFINE STATIC}</syntaxhighlight> |
==== Windows DLL ==== | ==== Windows DLL ==== | ||
Line 50: | Line 50: | ||
Добавьте ресурсы, назовите программу: | Добавьте ресурсы, назовите программу: | ||
− | < | + | <syntaxhighlight lang=pascal>program demo01; |
− | {$R *.res}</ | + | {$R *.res}</syntaxhighlight> |
− | Выберите режим компиляции, для использования so/dll/dylib | + | Выберите режим компиляции, для использования so/dll/dylib: |
− | < | + | <syntaxhighlight lang=pascal>{$DEFINE STATIC}</syntaxhighlight> |
Добавьте модули ZenGL. | Добавьте модули ZenGL. | ||
− | < | + | <syntaxhighlight lang=pascal>uses |
{$IFNDEF STATIC} | {$IFNDEF STATIC} | ||
zglHeader | zglHeader | ||
Line 68: | Line 68: | ||
zgl_utils | zgl_utils | ||
{$ENDIF} | {$ENDIF} | ||
− | ;</ | + | ;</syntaxhighlight> |
Задаем переменные: | Задаем переменные: | ||
− | < | + | <syntaxhighlight lang=pascal> |
var | var | ||
DirApp : String; | DirApp : String; | ||
− | DirHome : String;</ | + | DirHome : String;</syntaxhighlight> |
...Процедуры:: | ...Процедуры:: | ||
− | < | + | <syntaxhighlight lang=pascal>procedure Init; |
begin | begin | ||
// Загрузка основных ресурсов | // Загрузка основных ресурсов | ||
Line 94: | Line 94: | ||
procedure Timer; | procedure Timer; | ||
begin | begin | ||
− | // | + | // Заголовок будет показывать количество кадров в секунду. |
wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' ); | wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' ); | ||
end; | end; | ||
Line 101: | Line 101: | ||
begin | begin | ||
// | // | ||
− | end;</ | + | end;</syntaxhighlight> |
− | + | Вот начало программы: | |
− | < | + | <syntaxhighlight lang=pascal>Begin |
{$IFNDEF STATIC} | {$IFNDEF STATIC} | ||
zglLoad( libZenGL ); | zglLoad( libZenGL ); | ||
{$ENDIF} | {$ENDIF} | ||
− | // | + | // Для загрузки/создания каких-то своих настроек/профилей/etc. можно получить путь к |
− | // | + | // домашенему каталогу пользователя, или к исполняемому файлу(не работает для GNU/Linux). |
DirApp := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) ); | DirApp := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) ); | ||
DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) ); | DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) ); | ||
− | // | + | // Создаем таймер с интервалом 1000мс. |
timer_Add( @Timer, 1000 ); | timer_Add( @Timer, 1000 ); | ||
− | // | + | // Регистрируем процедуру, что выполнится сразу после инициализации ZenGL. |
zgl_Reg( SYS_LOAD, @Init ); | zgl_Reg( SYS_LOAD, @Init ); | ||
− | // | + | // Регистрируем процедуру, где будет происходить рендер. |
zgl_Reg( SYS_DRAW, @Draw ); | zgl_Reg( SYS_DRAW, @Draw ); | ||
− | // | + | // Регистрируем процедуру, которая будет принимать разницу времени между кадрами. |
zgl_Reg( SYS_UPDATE, @Update ); | zgl_Reg( SYS_UPDATE, @Update ); | ||
− | // | + | // Регистрируем процедуру, которая выполнится после завершения работы ZenGL. |
zgl_Reg( SYS_EXIT, @Quit ); | zgl_Reg( SYS_EXIT, @Quit ); | ||
− | // | + | // Т.к. модуль сохранен в кодировке UTF-8 и в нем используются строковые переменные |
− | // | + | // следует указать использование этой кодировки. |
zgl_Enable( APP_USE_UTF8 ); | zgl_Enable( APP_USE_UTF8 ); | ||
− | // | + | // Устанавливаем заголовок окна. |
wnd_SetCaption( '01 - Initialization' ); | wnd_SetCaption( '01 - Initialization' ); | ||
− | // | + | // Разрешаем курсор мыши. |
wnd_ShowCursor( TRUE ); | wnd_ShowCursor( TRUE ); | ||
− | // | + | // Указываем первоначальные настройки. |
scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE ); | scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE ); | ||
− | // | + | // Инициализируем ZenGL. |
zgl_Init(); | zgl_Init(); | ||
− | End.</ | + | End.</syntaxhighlight> |
=== Результат === | === Результат === | ||
Наш результат - ''шаблон'' для проектов ZenGL: | Наш результат - ''шаблон'' для проектов ZenGL: | ||
− | < | + | <syntaxhighlight lang=pascal>program template; |
{$DEFINE STATIC} | {$DEFINE STATIC} | ||
Line 203: | Line 203: | ||
scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE ); | scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE ); | ||
zgl_Init(); | zgl_Init(); | ||
− | End.</ | + | End. |
− | + | </syntaxhighlight> | |
− | |||
− |
Latest revision as of 12:31, 3 March 2020
│
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":
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.