Difference between revisions of "ZenGL Tutorial/ru"
m (added index) |
m (Fixed syntax highlighting; deleted category included in page template) |
||
(9 intermediate revisions by 5 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> |
+ | |||
+ | == Сборка == | ||
+ | |||
+ | Приложение можно собрать с 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 ==== | ||
+ | |||
+ | Откройте "''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), скопируйте необходимые библиотеки в директорию выполнения программы. | ||
+ | |||
+ | Добавьте ресурсы, назовите программу: | ||
+ | <syntaxhighlight lang=pascal>program demo01; | ||
+ | |||
+ | {$R *.res}</syntaxhighlight> | ||
+ | |||
+ | Выберите режим компиляции, для использования so/dll/dylib: | ||
+ | <syntaxhighlight lang=pascal>{$DEFINE STATIC}</syntaxhighlight> | ||
+ | |||
+ | Добавьте модули ZenGL. | ||
+ | <syntaxhighlight lang=pascal>uses | ||
+ | {$IFNDEF STATIC} | ||
+ | zglHeader | ||
+ | {$ELSE} | ||
+ | zgl_main, | ||
+ | zgl_screen, | ||
+ | zgl_window, | ||
+ | zgl_timers, | ||
+ | zgl_utils | ||
+ | {$ENDIF} | ||
+ | ;</syntaxhighlight> | ||
+ | |||
+ | Задаем переменные: | ||
+ | <syntaxhighlight lang=pascal> | ||
+ | var | ||
+ | DirApp : String; | ||
+ | DirHome : String;</syntaxhighlight> | ||
+ | |||
+ | ...Процедуры:: | ||
+ | <syntaxhighlight lang=pascal>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;</syntaxhighlight> | ||
+ | |||
+ | Вот начало программы: | ||
+ | <syntaxhighlight lang=pascal>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.</syntaxhighlight> | ||
+ | |||
+ | === Результат === | ||
+ | |||
+ | Наш результат - ''шаблон'' для проектов ZenGL: | ||
+ | <syntaxhighlight lang=pascal>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. | ||
+ | </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.