ZenGL Tutorial/ru

From Lazarus wiki
Revision as of 10:41, 3 August 2011 by Chronos (talk | contribs)
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

 // Заголовок будет показывать количество кадров в секунду.
 wnd_SetCaption( '01 - Initialization[ FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) + ' ]' );

end;

procedure Quit; begin

//

end;</delphi>

Вот начало программы: <delphi>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.</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>