Difference between revisions of "ZenGL Tutorial/ru"

From Lazarus wiki
Jump to navigationJump to search
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''":
  
<delphi>headers
+
<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)</delphi>
+
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] in the [http://zengl.org/wiki/ ZenGL Wiki].
+
Подробнее можно прочесть в [http://zengl.org/wiki/doku.php?id=compilation compilation] на [http://zengl.org/wiki/ ZenGL Wiki].
  
 
Статическая сборка:
 
Статическая сборка:
<delphi>{$DEFINE STATIC}</delphi>
+
<syntaxhighlight lang=pascal>{$DEFINE STATIC}</syntaxhighlight>
 
Сборка с использованием загружаемых библиотек:
 
Сборка с использованием загружаемых библиотек:
<delphi>//{$DEFINE STATIC}</delphi>
+
<syntaxhighlight lang=pascal>//{$DEFINE STATIC}</syntaxhighlight>
  
 
==== Windows DLL ====
 
==== Windows DLL ====
Line 50: Line 50:
  
 
Добавьте ресурсы, назовите программу:
 
Добавьте ресурсы, назовите программу:
<delphi>program demo01;
+
<syntaxhighlight lang=pascal>program demo01;
  
{$R *.res}</delphi>
+
{$R *.res}</syntaxhighlight>
  
Выберите режим компиляции, для использования so/dll/dylib):
+
Выберите режим компиляции, для использования so/dll/dylib:
<delphi>{$DEFINE STATIC}</delphi>
+
<syntaxhighlight lang=pascal>{$DEFINE STATIC}</syntaxhighlight>
  
 
Добавьте модули ZenGL.
 
Добавьте модули ZenGL.
<delphi>uses
+
<syntaxhighlight lang=pascal>uses
 
   {$IFNDEF STATIC}
 
   {$IFNDEF STATIC}
 
   zglHeader
 
   zglHeader
Line 68: Line 68:
 
   zgl_utils
 
   zgl_utils
 
   {$ENDIF}
 
   {$ENDIF}
   ;</delphi>
+
   ;</syntaxhighlight>
  
 
Задаем переменные:
 
Задаем переменные:
<delphi>
+
<syntaxhighlight lang=pascal>
 
var
 
var
 
   DirApp  : String;
 
   DirApp  : String;
   DirHome : String;</delphi>
+
   DirHome : String;</syntaxhighlight>
  
 
...Процедуры::
 
...Процедуры::
<delphi>procedure Init;
+
<syntaxhighlight lang=pascal>procedure Init;
 
begin
 
begin
 
   // Загрузка основных ресурсов
 
   // Загрузка основных ресурсов
Line 94: Line 94:
 
procedure Timer;
 
procedure Timer;
 
begin
 
begin
   // Caption will show the frames per second.
+
   // Заголовок будет показывать количество кадров в секунду.
 
   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;</delphi>
+
end;</syntaxhighlight>
  
Here start the program:
+
Вот начало программы:
<delphi>Begin
+
<syntaxhighlight lang=pascal>Begin
 
   {$IFNDEF STATIC}
 
   {$IFNDEF STATIC}
 
   zglLoad( libZenGL );
 
   zglLoad( libZenGL );
 
   {$ENDIF}
 
   {$ENDIF}
   // For loading/creating your own options/profiles/etc. you can get path to user home
+
   // Для загрузки/создания каких-то своих настроек/профилей/etc. можно получить путь к
   // directory, or to executable file(not works for GNU/Linux).
+
   // домашенему каталогу пользователя, или к исполняемому файлу(не работает для 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 ) ) );
  
   // Create a timer with interval 1000ms.
+
   // Создаем таймер с интервалом 1000мс.
 
   timer_Add( @Timer, 1000 );
 
   timer_Add( @Timer, 1000 );
  
   // Register the procedure, that will be executed after ZenGL initialization.
+
   // Регистрируем процедуру, что выполнится сразу после инициализации ZenGL.
 
   zgl_Reg( SYS_LOAD, @Init );
 
   zgl_Reg( SYS_LOAD, @Init );
   // Register the render procedure.
+
   // Регистрируем процедуру, где будет происходить рендер.
 
   zgl_Reg( SYS_DRAW, @Draw );
 
   zgl_Reg( SYS_DRAW, @Draw );
   // Register the procedure, that will get delta time between the frames.
+
   // Регистрируем процедуру, которая будет принимать разницу времени между кадрами.
 
   zgl_Reg( SYS_UPDATE, @Update );
 
   zgl_Reg( SYS_UPDATE, @Update );
   // Register the procedure, that will be executed after ZenGL shutdown.
+
   // Регистрируем процедуру, которая выполнится после завершения работы ZenGL.
 
   zgl_Reg( SYS_EXIT, @Quit );
 
   zgl_Reg( SYS_EXIT, @Quit );
 
    
 
    
   // Enable using of UTF-8, because this unit saved in UTF-8 encoding and here used
+
   // Т.к. модуль сохранен в кодировке UTF-8 и в нем используются строковые переменные
   // string variables.
+
   // следует указать использование этой кодировки.
 
   zgl_Enable( APP_USE_UTF8 );
 
   zgl_Enable( APP_USE_UTF8 );
  
   // Set the caption of the window.
+
   // Устанавливаем заголовок окна.
 
   wnd_SetCaption( '01 - Initialization' );
 
   wnd_SetCaption( '01 - Initialization' );
  
   // Allow to show the mouse cursor.
+
   // Разрешаем курсор мыши.
 
   wnd_ShowCursor( TRUE );
 
   wnd_ShowCursor( TRUE );
  
   // Set screen options.
+
   // Указываем первоначальные настройки.
 
   scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
 
   scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
  
   // Initialize ZenGL.
+
   // Инициализируем ZenGL.
 
   zgl_Init();
 
   zgl_Init();
End.</delphi>   
+
End.</syntaxhighlight>   
  
 
=== Результат ===
 
=== Результат ===
  
 
Наш результат -  ''шаблон'' для проектов ZenGL:
 
Наш результат -  ''шаблон'' для проектов ZenGL:
<delphi>program template;
+
<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.</delphi>
+
End.
 
+
</syntaxhighlight>
 
 
[[Category:Graphics]]
 

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.