Difference between revisions of "ZenGL Tutorial/ru"

From Lazarus wiki
m (Text replace - "delphi>" to "syntaxhighlight>")
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>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 33: Line 33:
  
 
Статическая сборка:
 
Статическая сборка:
<delphi>{$DEFINE STATIC}</delphi>
+
<syntaxhighlight>{$DEFINE STATIC}</syntaxhighlight>
 
Сборка с использованием загружаемых библиотек:
 
Сборка с использованием загружаемых библиотек:
<delphi>//{$DEFINE STATIC}</delphi>
+
<syntaxhighlight>//{$DEFINE STATIC}</syntaxhighlight>
  
 
==== Windows DLL ====
 
==== Windows DLL ====
Line 50: Line 50:
  
 
Добавьте ресурсы, назовите программу:
 
Добавьте ресурсы, назовите программу:
<delphi>program demo01;
+
<syntaxhighlight>program demo01;
  
{$R *.res}</delphi>
+
{$R *.res}</syntaxhighlight>
  
 
Выберите режим компиляции, для использования so/dll/dylib:
 
Выберите режим компиляции, для использования so/dll/dylib:
<delphi>{$DEFINE STATIC}</delphi>
+
<syntaxhighlight>{$DEFINE STATIC}</syntaxhighlight>
  
 
Добавьте модули ZenGL.
 
Добавьте модули ZenGL.
<delphi>uses
+
<syntaxhighlight>uses
 
   {$IFNDEF STATIC}
 
   {$IFNDEF STATIC}
 
   zglHeader
 
   zglHeader
Line 68: Line 68:
 
   zgl_utils
 
   zgl_utils
 
   {$ENDIF}
 
   {$ENDIF}
   ;</delphi>
+
   ;</syntaxhighlight>
  
 
Задаем переменные:
 
Задаем переменные:
<delphi>
+
<syntaxhighlight>
 
var
 
var
 
   DirApp  : String;
 
   DirApp  : String;
   DirHome : String;</delphi>
+
   DirHome : String;</syntaxhighlight>
  
 
...Процедуры::
 
...Процедуры::
<delphi>procedure Init;
+
<syntaxhighlight>procedure Init;
 
begin
 
begin
 
   // Загрузка основных ресурсов
 
   // Загрузка основных ресурсов
Line 101: Line 101:
 
begin
 
begin
 
  //
 
  //
end;</delphi>
+
end;</syntaxhighlight>
  
 
Вот начало программы:
 
Вот начало программы:
<delphi>Begin
+
<syntaxhighlight>Begin
 
   {$IFNDEF STATIC}
 
   {$IFNDEF STATIC}
 
   zglLoad( libZenGL );
 
   zglLoad( libZenGL );
Line 140: Line 140:
 
   // Инициализируем ZenGL.
 
   // Инициализируем ZenGL.
 
   zgl_Init();
 
   zgl_Init();
End.</delphi>   
+
End.</syntaxhighlight>   
  
 
=== Результат ===
 
=== Результат ===
  
 
Наш результат -  ''шаблон'' для проектов ZenGL:
 
Наш результат -  ''шаблон'' для проектов ZenGL:
<delphi>program template;
+
<syntaxhighlight>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/ru]]
 
[[Category:Graphics/ru]]

Revision as of 16:14, 24 March 2012

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.