Каким обpазом выбиpать pазмеp шpифта?

Previous  Top  Next

    
 

 

 

Автор: Nomadic

 

Каким обpазом выбиpать pазмеp шpифта, т.к. все мои стpадания по выбоpyпаpаметpов шpифта в CreateFont() никак не отpажались на его pазмеpе. Все что я пpидyмал, это юзать glScale(), но в этом слyчае полyчаем плохое качество (по сpавнению с той-же Воpдой) пpи малом pазмеpе символов

 

Вот часть работающего примера на Си (переведенного мною на Паскаль (АА)).

 

Code:

procedure GLSetupRC(pData: Pointer)

//void GLSetupRC(void *pData)

//{

var

//  HDC hDC;

 

hDC: HDC;

//  HFONT hFont;

 

hFont: HFONT;

//  GLYPHMETRICSFLOAT agmf[128];

agmf: array[0..127] of GLYPHMETRICSFLOAT;

//  LOGFONT logfont;

 

logfont: LOGFONT;

 

begin

 

logfont.lfHeight := -10;

logfont.lfWidth := 0;

logfont.lfEscapement := 0;

logfont.lfOrientation := 0;

logfont.lfWeight := FW_BOLD;

logfont.lfItalic := FALSE;

logfont.lfUnderline := FALSE;

logfont.lfStrikeOut := FALSE;

logfont.lfCharSet := ANSI_CHARSET;

logfont.lfOutPrecision := OUT_DEFAULT_PRECIS;

logfont.lfClipPrecision := CLIP_DEFAULT_PRECIS;

logfont.lfQuality := DEFAULT_QUALITY;

logfont.lfPitchAndFamily := DEFAULT_PITCH;

//strcpy(logfont.lfFaceName,"Arial");

//  strcpy(logfont.lfFaceName,"Decor");

 

StrPCopy(logfont.lfFaceName, 'Decor');

 

glDepthFunc(GL_LESS);

glEnable(GL_DEPTH_TEST); // Hidden surface removal

glFrontFace(GL_CCW); // Counter clock-wise polygons face out

glEnable(GL_CULL_FACE); // Do not calculate insides

glShadeModel(GL_SMOOTH); // Smooth shading

glEnable(GL_AUTO_NORMAL);

glEnable(GL_NORMALIZE);

glEnable(GL_COLOR_MATERIAL);

 

glClearColor(0.0, 0.0, 0.0, 1.0);

 

glEnable(GL_LIGHTING);

glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);

glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);

glLightfv(GL_LIGHT0, GL_SPECULAR, specular);

glLightfv(GL_LIGHT0, GL_POSITION, lightPos);

glEnable(GL_LIGHT0);

 

glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

glMaterialfv(GL_FRONT, GL_SPECULAR, specular);

glMateriali(GL_FRONT, GL_SHININESS, 100);

 

// Blue 3D Text

glRGB(0, 0, 255);

 

// Select the font into the DC

hDC := (HDC)pData;

//  hFont = CreateFontIndirect(&logfont);

 

hFont := CreateFontIndirect(Addr(logfont));

SelectObject(hDC, hFont);

 

//create display lists for glyphs 0 through 255 with 0.3 extrusion

// and default deviation. The display list numbering starts at 1000

// (it could be any number).

//  if(!wglUseFontOutlines(hDC, 0, 128, 1000, 0., 0.3,

//                            WGL_FONT_POLYGONS, agmf))

 

if not wglUseFontOutlines(hDC, 0, 128, 1000, 0., 0.3,

 

   //>                                         ``` - это тебе поможет

   //> Выводить текст можно в любым масштабе

 

   WGL_FONT_POLYGONS, agmf) then

 

   Windows.MessageBox(nil, 'Could not create Font Outlines',

     'Error', MB_OK or MB_ICONSTOP);

 

// Delete the font now that we are done

DeleteObject(hFont);

//}

end;

 

// void GLRenderScene(void *pData)

 

procedure GLRenderScene(pData: Pointer);

begin

 

(*  ...  *)

 

// Draw 3D text

glListBase(1000);

glPushMatrix();

// Set up transformation to draw the string.

glTranslatef(-35.0, 0.0, -5.0);

glScalef(60.0, 60.0, 60.0);

glCallLists(3, GL_UNSIGNED_BYTE, 'Decor');

glPopMatrix(); // Clear the window with current clearing color

 

(* ... *)

end;

 

 

 

 

©Drkb::01946

       

Взято с http://delphiworld.narod.ru