Главная » Free Pascal » Формирование надписей в области рисования Free Pascal

0

В пакете GLUT предусмотрены довольно скромные возможности для нанесе- ния подписей в области рисования. Во-первых, мы можем установить цвет симво- лов и начальную позицию подписи (координаты левого нижнего угла первого сим- вола):

glColor3f(vr, vg, vb); glRasterPos2f(x, y);

Затем в цикле можно отобразить каждую букву подписи s, представленную обычной строкой типа string, с помощью следующей процедуры: glutBitmapCharacter(font, ord(s[i]));

Первым параметром этой процедуры является нетипизированный указатель на выбранный пользователем шрифт. Таких шрифтов в пакете GLUT всего семь, и список указателей, которыми можно пользоваться, приведен в табл. 16.4. К сожа- лению, ни в одном из них не представлены русские буквы.

Таблица 16.4

Указатель на шрифт

Пояснение

GLUT_BITMAP_8_BY_13

Растровый моноширинный шрифт размером

8 13 пикселов

GLUT_BITMAP_9_BY_15

Растровый моноширинный шрифт размером

9 15 пикселов

GLUT_BITMAP_TIMES_ROMAN_10

Шрифт Times Roman высотой 10 пунктов

GLUT_BITMAP_TIMES_ROMAN_24

Шрифт Times Roman высотой 24 пункта

GLUT_BITMAP_HELVETICA_10

Шрифт Helvetica высотой 10 пунктов

GLUT_BITMAP_HELVETICA_12

Шрифт Helvetica высотой 12 пунктов

GLUT_BITMAP_HELVETICA_18

Шрифт Helvetica высотой 18 пунктов

Мы внимательно знакомились со справочными материалами по пакету GLUT, представленными в MSDN, и некоторыми вспомогательными материалами на сай- те разработчиков Free Pascal, но нигде не обнаружили точных рекомендаций по использованию описанных выше средств. В результате проб и ошибок были уста- новлены две важные детали.

Во-первых, если задание начальной координаты текста (процедура glRasterPos2f) предшествует заданию цвета надписи, то при любых параметрах процедуры glColor3f надписи рисуются белым цветом. Поэтому надо сначала ус- тановить цвет и только после этого задавать позицию подписи.

Во-вторых, воспроизведение каждого символа с помощью процедуры glutBitmapCharacter осуществляется путем копирования растровой маски каждо- го символа выбранного шрифта в соответствующую часть области рисования с ав- томатическим продвижением указателя позиции на ширину текущего символа. По- этому аффинные преобразования (сдвиг, повороты, сжатия/расширения) влияют только на начальную позицию подписи, а растровые образы символов при этом остаются параллельными координатным полям области отображения. Бедность набора шрифтов в GLUT объясняется тем, что в соответствующих сервисных про- граммах приходится хранить растровые изображения каждого символа.

Наиболее экономный способ воспроизведения подписей, к которому мы при- шли после многочисленных экспериментов, приводится в листинге 16.4 в модифи- кации программы malevich.pas.

   Листинг 1 6 .4 .  По д пись  к  ч е рному к вад ра ту                                                                                  

program Malevich_t; uses

GL, GLUT;

//—————————————-

procedure writeGL(x,y:single;font:pointer;s:string); var

i:integer;

begin

glRasterPos2f(x, y);  for i:=1 to length(s) do

glutBitmapCharacter(font,ord(s[i])); end;

//——————————————-

procedure OnRedraw; cdecl; var

x,y:single;

f:array [0..3] of single; begin

glClear(GL_COLOR_BUFFER_BIT);

glColor3f(0.8,0.75,0.75);

glRectf(-1,-1,1,1);

glColor3f(0.1,0.1,0.1); glRectf(-0.9,-0.9,0.9,0.9);

glColor3f(0,1,1);

writeGL(0.28,-0.89,GLUT_BITMAP_TIMES_ROMAN_24,’Malevich’);

glFlush; end;

//—————————————–

procedure OnResize(W,H:Longint); cdecl; begin

glViewport(0, 0, W, H); glLoadIdentity;

if W>H then glScalef(H/W,1,1) else glScalef(1,W/H,1); end;

//—————————————–

begin

glutInit(@argc,argv); glutCreateWindow(‘OpenGL: Malevich’); glutDisplayFunc(@OnRedraw); glutReshapeFunc(@OnResize); glMatrixMode(GL_MODELVIEW); glClearColor(1,1,1,1);

glutMainLoop; end.

Рис. 16.4. Черный квадрат с подписью

Результат ее работы представлен на рис. 16.4. Единственное неудобство заклю- чается в экспериментальном подборе координат точки привязки текста. Надо учи- тывать, что границы в области рисования по каждой координате принадлежат диа- пазону [–1, +1].

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии