ZenGL Tutorial 2/ru

From Free Pascal wiki
Revision as of 08:47, 14 May 2015 by FTurtle (talk | contribs) (categories)
Jump to navigationJump to search

English (en) español (es) français (fr) русский (ru)


ZenGL/ru | Tutorial 1 | Tutorial 2 | Tutorial 3 | Edit

Создание шрифта ZenGL

Создадим шрифт ZenGL. Для решения поставленной задачи нам потребуется скачать генератор шрифтов ZenFont. Запустив программу, вы увидите что-то похожее на картинку ниже:

zenfont.png

Создание программы

  • Создаем пустой проект и ссылаемся на ZenGL как это было описано в предыдущей статье.
  • Создадим директории:

projectname\bin

projectname\data

projectname\project

  • Сохраним проект по пути: "projectname\project".
  • Скопируем шрифт (.ZFI файл) в "projectname\data"
  • Идем в Project > Options > Paths и в Target file name допишем "..\bin\project1".

Исходный код

var
  dirRes     : String {$IFNDEF DARWIN} = '../data/' {$ENDIF}; // это путь к ресурсам
  fnt        : zglPFont; // это шрифт, который мы будем использовать

Загрузим шрифт:

procedure Init;
begin
  fnt := font_LoadFromFile( dirRes + 'Agency FB-Regular-18pt.zfi' );
end;

Процедура рисования (тут мы рисуем текст нашим шрифтом):

procedure Draw;
var
  rect: zglTRect;
begin
  text_Draw( fnt, 0, 0, 'Sample Text. Press ESC to EXIT.' );

  text_DrawEx( fnt, 32, 32, 1.5, 0, 'Sample Text with DrawEx - Scale 1.5 - Alpha 150', 150 );

  rect.H:=128;
  rect.W:=400;
  rect.X:=0;
  rect.Y:=96;

  pr2d_rect(rect.X,rect.Y,rect.W,rect.H,$FFFFFF,100);

  text_DrawInRect(fnt,rect,
  'Sample multiline text in rect.' + #10 +
  'Sample multiline text in rect.'+ #10 +
  'Sample multiline text in rect.');
end;

Код выхода из программы по нажатию ESC:

procedure Timer;
begin
  if key_Press( K_ESCAPE ) Then zgl_Exit();
  key_ClearState();
end;

Результат

Теперь вы можете увидеть текст напечатанный нашим шрифтом

zengltext.png

Конечный код будет выглядет примено так:

program project1;

{$IFDEF WINDOWS}
  {$R *.res}
{$ENDIF}
{$DEFINE STATIC}

uses
  {$IFNDEF STATIC}
  zglHeader
  {$ELSE}
  zgl_main,
  zgl_screen,
  zgl_window,
  zgl_timers,
  zgl_keyboard,
  zgl_font,
  zgl_text,
  zgl_textures,
  zgl_textures_tga,
  zgl_primitives_2d,
  zgl_utils,
  zgl_math_2d
  {$ENDIF}
  ;

var
  dirRes     : String {$IFNDEF DARWIN} = '../data/' {$ENDIF};
  fnt        : zglPFont;

procedure Init;
begin
  fnt := font_LoadFromFile( dirRes + 'Agency FB-Regular-18pt.zfi' );
end;

procedure Draw;
var
  rect: zglTRect;
begin
  text_Draw( fnt, 0, 0, 'Sample Text. Press ESC to EXIT.' );

  text_DrawEx( fnt, 32, 32, 1.5, 0, 'Sample Text with DrawEx - Scale 1.5 - Alpha 150', 150 );

  rect.H:=128;
  rect.W:=400;
  rect.X:=0;
  rect.Y:=96;

  pr2d_rect(rect.X,rect.Y,rect.W,rect.H,$FFFFFF,100);

  text_DrawInRect(fnt,rect,
  'Sample multiline text in rect.' + #10 +
  'Sample multiline text in rect.'+ #10 +
  'Sample multiline text in rect.');
end; 

procedure Timer;
begin
  if key_Press( K_ESCAPE ) Then zgl_Exit();
  key_ClearState();
end;

Begin
  {$IFNDEF STATIC}
  zglLoad( libZenGL );
  {$ENDIF}

  timer_Add( @Timer, 16 );

  zgl_Reg( SYS_LOAD, @Init );
  zgl_Reg( SYS_DRAW, @Draw );

  zgl_Enable( APP_USE_UTF8 );

  wnd_SetCaption( 'Sample Text' );

  wnd_ShowCursor( TRUE );

  scr_SetOptions( 800, 600, REFRESH_MAXIMUM, FALSE, FALSE );

  zgl_Init();
End.