Difference between revisions of "ZenGL Tutorial/ru"
(→Сборка) |
|||
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''" | + | После, в директории "''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> | ||
+ | |||
+ | |||
+ | [[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>