ZenGL Tutorial/ru

From Lazarus wiki
Jump to navigationJump to search

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 на 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>