Você está na página 1de 16

Texto em OpenGL

Tlio Caraciolo

Conversa de Hoje

Tcnicas
Fontes

Bitmap Outline fonts OpenGL font library

Bitmap Fonts

Maneira simples de apresentar texto em duas dimenses na tela.


Destorcem

se aumentarmos No tm profundidade (2D apenas)

Utilizamos a funo
BOOL wglUseFontBitmaps(HDC hdc, DWORD first,DWORD count, DWORD listBase);

... continuando,
Para usar Bitmap Fonts, precisamos criar um display list de tamanho 96 unsigned int base; base = glGenList(96); Depois, utilizamos a funo do windows CreateFont(), para criar a font e receber um handle.

Cdigo
HFONT hFont; // handle de font no windows // Criaremos uma fonte Courier de tamanho 14 hFont = CreateFont(14, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, Courier); // verificamos se deu tudo certo prtica aconselhvel no Windows If (!hFont) return 0; // Selecionamos um device, como assim um device? :P SelectObject(g_HDC, hFont); // Finalmente, preparamos a fonte para ser usada wglUseFontBitmaps(g_HDC, 32, 96, base);

Escrevendo

Para escrever na tela, utilizamos as funes de display list glListBase e glCallLists


char* str = O que escrever na tela; glPushAttrib(GL_LIST_BIT); // Lembram? No s matrizes... glListBase(base 32); glCallLists(strlen(str), GL_UNSIGNED_BYTE, str); glPopAttrib();

Precisamos ainda, posicionar o texto na tela, para isso, utilizamos glRasterPos2f(x, y) Complicado no? Podemos fazer nossa prpria funo, ou usar o GLUT.

Com GLUT

void glutBitmapCharacter(void *font, int character);


font

Bitmap font to use. Character to render (not confined to 8 bits).

character

Quais fontes?
http://www.opengl.org/resources/libraries/glut/spec3/n

ode76.html

Cdigo
// posicionamos na tela glRasterPos2f(0.5, 0.5);
// String a ser escrita na tela char* p = (char*) Pode ser assim?; while (*p != '\0') { glutBitmapCharacter(GLUT_BITMAP_HELVETICA_18, *p++); }

Hora de trabalhar

Vamos testar alguns exemplos...

Outline Fonts

Parecem bastante com as bitmaps, mas...


Tm

3D dimenses, sofrem as transformaes do MODELVIEW

Diferenas, s para criar...


Utilizamos

uma struct do windows: GLYPHMETRICSFLOAT. Precisamos de um display list com 256. E utilizamos a funo wglUseFontOutlines(). Que possui o depth parameter (profundidade)

Novament, o GLUT

Simplifica nossa vida... glutStrokeCharacter


http://www.opengl.org/resources/libraries/glut/spec3/n

ode78.html glPushMatrix(); // Mesmo esquema... p = (char*) string; while (*p != '\0') glutStrokeCharacter(font, *p++); glPopMatrix();

Testes, trabalho...

Implementar duas funes para escrever com as duas tcnias...


Utilizando

o GLUT

glFont
students.cs.byu.edu/~bfish/glfont.php Baixar e executar

glFont.exe

Mexer a vontade, vamos utilizar a fonte posteriormente em nosso cdigo.

Cdigo
GLFONT font;
unsigned int tex; glEnable(GL_TEXTURE_2D); glGenTexture(1, &tex); Font.create(arquivo.glf, tex); font.Begin(); font.drawString(Testando, 5, 5, 0); font.End();

Consideraes

O GLUT facilita bastante nosso trabalho...


Texturas Fonts Input Janelas

Devemos, por outro lado, estar cientes de como fazer o mesmo sem ele. Muitas vezes o GLUT bastante limitado e a ajuda que ele prov termina sendo insuficiente.

Trabalhar...
Testar exemplos com os dois tipos de fonts Como nossa aula foi bem rpida, o resto do tempo utilizaremos para discutir sobre o projeto e implementao...

Você também pode gostar