Копия викизеркало

Это зеркало вики с pascal.chat. Правка, история и вход — там.

ZenGL Tutorial/ru

Deutsch · English · Español · Français · Русский

Скачать

ZenGL для Linux, Windows и Mac можно скачать тут.

Установка

Для инсталляции достаточно распаковать скачанный архив в удобную директорию.

Настройка путей

Перед использованием модулей не забудьте добавить в пути к исходным кодам путь к исходникам ZenGL

Откройте "Project > Project Options". В "Compiler Options > Paths" добавьте путь к "Other Unit Files":

pascal
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.

Статическая сборка:

pascal
{$DEFINE STATIC}

Сборка с использованием загружаемых библиотек:

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

Добавьте ресурсы, назовите программу:

pascal
program demo01;

{$R *.res}

Выберите режим компиляции, для использования so/dll/dylib:

pascal
{$DEFINE STATIC}

Добавьте модули ZenGL.

pascal
uses
  {$IFNDEF STATIC}
  zglHeader
  {$ELSE}
  zgl_main,
  zgl_screen,
  zgl_window,
  zgl_timers,
  zgl_utils
  {$ENDIF}
  ;

Задаем переменные:

pascal
var
  DirApp  : String;
  DirHome : String;

...Процедуры::

pascal
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;

Вот начало программы:

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

pascal
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.

From the Free Pascal wiki, page "ZenGL Tutorial/ru", as it stood on 2020-03-03 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Версия 1, последнее изменение: WikiArchive, .