Difference between revisions of "ZenGL Tutorial/ru"

From Lazarus wiki
Jump to navigationJump to search
Line 41: Line 41:
 
Откройте "''src\Lazarus\ZenGL.lpi''" а потом: "''Run > Compile (Ctrl + F9)''".
 
Откройте "''src\Lazarus\ZenGL.lpi''" а потом: "''Run > Compile (Ctrl + F9)''".
  
После,  в директории "''src\''" вы можете увидеть файл "''ZenGL.dll''": скопируйте его в директорию "''bin\i386''" ll demo binaries are compiled. You always must copy libraries in your program output directory if you are using dll.
+
После,  в директории "''src\''" вы можете увидеть файл "''ZenGL.dll''": скопируйте его в директорию "''bin\i386''"  
 +
При использовании динамической линковки, вам придется постоянно копировать DLL в выходнцю директорию проекта.
  
Now you can compile demos commenting the ''$DEFINE STATIC''.
 
  
Other dll files in "''bin\''" folder you can use are: <code>chipmunk.dll ; libogg-0.dll ; libvorbis-0.dll ; libvorbis-3.dll</code>
+
== Первая программа ==
 +
Сперва, создайте новое приложение Free Pascal ("Free Pascal Program"), измените пути к исходным кодам, как было указано выше.
 +
Также, смените ''Syntax Mode'' в '' Project > Project Options > Compiler Options > Parsing'' на ''Delphi (-Mdelphi)''.
 +
Запомните: если вы используете динамическую линковку (so/dll/dylib), скопируйте необходимые библиотеки в директорию выполнения программы.
 +
 
 +
Добавьте ресурсы, назовите программу:
 +
<delphi>program demo01;
 +
 
 +
{$R *.res}</delphi>
 +
 
 +
Выберите режим компиляции, для использования so/dll/dylib):
 +
<delphi>{$DEFINE STATIC}</delphi>
 +
 
 +
Добавьте модули ZenGL.
 +
<delphi>uses
 +
  {$IFNDEF STATIC}
 +
  zglHeader
 +
  {$ELSE}
 +
  zgl_main,
 +
  zgl_screen,
 +
  zgl_window,
 +
  zgl_timers,
 +
  zgl_utils
 +
  {$ENDIF}
 +
  ;</delphi>
 +
 
 +
Задаем переменные:
 +
<delphi>
 +
var
 +
  DirApp  : String;
 +
  DirHome : String;</delphi>
 +
 
 +
...Процедуры::
 +
<delphi>procedure Init;
 +
begin
 +
  // Загрузка основных ресурсов
 +
end;
 +
 
 +
procedure Draw;
 +
begin
 +
  // Рисуем то, что необходимо нам
 +
end;
 +
 
 +
procedure Update( dt : Double );
 +
begin
 +
  // Эта функция - лучший метод для реализации плавного движения
 +
end;
 +
 
 +
procedure Timer;
 +
begin
 +
  // Caption will show the frames per second.
 +
  wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );
 +
end;
 +
 
 +
procedure Quit;
 +
begin
 +
//
 +
end;</delphi>
 +
 
 +
Here start the program:
 +
<delphi>Begin
 +
  {$IFNDEF STATIC}
 +
  zglLoad( libZenGL );
 +
  {$ENDIF}
 +
  // For loading/creating your own options/profiles/etc. you can get path to user home
 +
  // directory, or to executable file(not works for GNU/Linux).
 +
  DirApp  := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
 +
  DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );
 +
 
 +
  // Create a timer with interval 1000ms.
 +
  timer_Add( @Timer, 1000 );
 +
 
 +
  // Register the procedure, that will be executed after ZenGL initialization.
 +
  zgl_Reg( SYS_LOAD, @Init );
 +
  // Register the render procedure.
 +
  zgl_Reg( SYS_DRAW, @Draw );
 +
  // Register the procedure, that will get delta time between the frames.
 +
  zgl_Reg( SYS_UPDATE, @Update );
 +
  // Register the procedure, that will be executed after ZenGL shutdown.
 +
  zgl_Reg( SYS_EXIT, @Quit );
 +
 
 +
  // Enable using of UTF-8, because this unit saved in UTF-8 encoding and here used
 +
  // string variables.
 +
  zgl_Enable( APP_USE_UTF8 );
 +
 
 +
  // Set the caption of the window.
 +
  wnd_SetCaption( '01 - Initialization' );
 +
 
 +
  // Allow to show the mouse cursor.
 +
  wnd_ShowCursor( TRUE );
 +
 
 +
  // Set screen options.
 +
  scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
 +
 
 +
  // Initialize ZenGL.
 +
  zgl_Init();
 +
End.</delphi> 
 +
 
 +
=== Результат ===
 +
 
 +
Наш результат - ''шаблон'' для проектов ZenGL:
 +
<delphi>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.</delphi>
 +
 
 +
 
 +
[[Category:Graphics]]

Revision as of 20:00, 30 May 2011

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":

<delphi>headers extra src src\Direct3D lib\jpeg\$(TargetCPU)-$(TargetOS) lib\msvcrt\$(TargetCPU) lib\ogg\$(TargetCPU)-$(TargetOS) lib\zlib\$(TargetCPU)-$(TargetOS)</delphi>

Сборка

Приложение можно собрать с ZenGL статически либо с использованием динамических библиотек (so/dll/dylib).

Подробнее можно прочесть на compilation in the ZenGL Wiki.

Статическая сборка: <delphi>{$DEFINE STATIC}</delphi> Сборка с использованием загружаемых библиотек: <delphi>//{$DEFINE STATIC}</delphi>

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), скопируйте необходимые библиотеки в директорию выполнения программы.

Добавьте ресурсы, назовите программу: <delphi>program demo01;

{$R *.res}</delphi>

Выберите режим компиляции, для использования so/dll/dylib): <delphi>{$DEFINE STATIC}</delphi>

Добавьте модули ZenGL. <delphi>uses

 {$IFNDEF STATIC}
 zglHeader
 {$ELSE}
 zgl_main,
 zgl_screen,
 zgl_window,
 zgl_timers,
 zgl_utils
 {$ENDIF}
 ;</delphi>

Задаем переменные: <delphi> var

 DirApp  : String;
 DirHome : String;</delphi>

...Процедуры:: <delphi>procedure Init; begin

 // Загрузка основных ресурсов

end;

procedure Draw; begin

 // Рисуем то, что необходимо нам

end;

procedure Update( dt : Double ); begin

 // Эта функция - лучший метод для реализации плавного движения

end;

procedure Timer; begin

 // Caption will show the frames per second.
 wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );

end;

procedure Quit; begin

//

end;</delphi>

Here start the program: <delphi>Begin

 {$IFNDEF STATIC}
 zglLoad( libZenGL );
 {$ENDIF}
 // For loading/creating your own options/profiles/etc. you can get path to user home
 // directory, or to executable file(not works for GNU/Linux).
 DirApp  := u_CopyStr( PChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
 DirHome := u_CopyStr( PChar( zgl_Get( DIRECTORY_HOME ) ) );
 // Create a timer with interval 1000ms.
 timer_Add( @Timer, 1000 );
 // Register the procedure, that will be executed after ZenGL initialization.
 zgl_Reg( SYS_LOAD, @Init );
 // Register the render procedure.
 zgl_Reg( SYS_DRAW, @Draw );
 // Register the procedure, that will get delta time between the frames.
 zgl_Reg( SYS_UPDATE, @Update );
 // Register the procedure, that will be executed after ZenGL shutdown.
 zgl_Reg( SYS_EXIT, @Quit );
 
 // Enable using of UTF-8, because this unit saved in UTF-8 encoding and here used
 // string variables.
 zgl_Enable( APP_USE_UTF8 );
 // Set the caption of the window.
 wnd_SetCaption( '01 - Initialization' );
 // Allow to show the mouse cursor.
 wnd_ShowCursor( TRUE );
 // Set screen options.
 scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );
 // Initialize ZenGL.
 zgl_Init();

End.</delphi>

Результат

Наш результат - шаблон для проектов ZenGL: <delphi>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.</delphi>