ZenGL Tutorial 2/ru

From Lazarus wiki
Revision as of 00:30, 31 May 2011 by Lainz (talk | contribs)
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".

Исходный код

<delphi>var

 dirRes     : String {$IFNDEF DARWIN} = '../data/' {$ENDIF}; // this is the directory where resources are placed
 fnt        : zglPFont; // this is the font we will use </delphi>

Загрузим шрифт: <delphi>procedure Init; begin

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

end; </delphi>

Процедура рисования (тут мы рисуем текст нашим шрифтом): <delphi>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; </delphi>

Код выхода из программы по нажатию ESC: <delphi>procedure Timer; begin

 if key_Press( K_ESCAPE ) Then zgl_Exit();
 key_ClearState();

end; </delphi>

Результат

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

zengltext.png

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

<delphi>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. </delphi>