Artigo: 131024 - Última revisão: terça-feira, 21 de Novembro de 2006 - Revisão: 3.4

Desenho Three-Dimensional texto em aplicações de OpenGL

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.
Expandir tudo | Reduzir tudo

Sumário

GDI operações, tais como TextOut, podem ser executadas numa janela de OpenGL apenas se a janela for armazenada em buffer único. A implementação do Windows NT do OpenGL não suporta gráficos do GDI numa janela de memória intermédia dupla. Por conseguinte, pode utilizar funções GDI para desenhar texto numa janela de memória intermédia dupla, por exemplo. Para desenhar o texto numa janela de memória intermédia dupla, uma aplicação pode utilizar as funções wglUseFontBitmaps e wglUseFontOutlines para criar listas de apresentação de caracteres num tipo de letra e desenhe os caracteres no tipo de letra com a função glCallLists.

A função wglUseFontOutlines é nova no Windows NT 3.51 e pode ser utilizada para desenhar 3-d caracteres de tipos de letra TrueType. Estes caracteres podem ser rodados, dimensionados, transformados e visualizados como qualquer outra OpenGL 3-d imagem. Esta função foi concebida para trabalhar com tipos de letra TrueType.

O exemplo GLFONT mostra como utilizar a função wglUseFontOutlines para criar listas de visualização para caracteres no tipo de letra TrueType e como desenhar, dimensionar e rodar imagens no tipo de letra utilizando glCallLists para desenhar os caracteres e outras funções de OpenGL rodar e dimensioná-los. Necessitará do Win32 SDK para Windows NT 3.51 para compilar este exemplo e terá de incorporar wglUseFontOutlines na aplicação. Também necessita de Windows NT 3.51 para executar a aplicação.

Mais Informação

O ficheiro seguinte está disponível para transferência a partir do Centro de transferências da Microsoft:
Glfont.exe (http://download.microsoft.com/download/platformsdk/sample24/1/w9xnt4/en-us/glfont.exe)
Para obter informações adicionais sobre como transferir ficheiros de suporte da Microsoft, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
119591  (http://support.microsoft.com/kb/119591/EN-US/ ) Como obter ficheiros de suporte da Microsoft a partir de serviços on-line
Microsoft procedeu de vírus neste ficheiro. Microsoft utilizou o mais recente software de detecção de vírus que estava disponível na data em que o ficheiro foi publicado. O ficheiro é alojado em servidores com segurança avançada que o ajudam a impedir alterações não autorizadas ao ficheiro. Para especificar o tipo de letra TrueType para os quais deseja wglUseFontOutlines para criar listas de apresentação, tem de criar o tipo de letra lógico pretendido utilizando CreateFont ou CreateFontIndirect . Em seguida, tem de seleccionar HFONT criado num contexto de dispositivo de ecrã (HDC) com SeleccionarObjecto e enviar o HDC para a função wglUseFontOutlines . Cada carácter é mapeada no x e y indicações de listas de visualização. Tem de especificar a profundidade na direcção inversa negativo no parâmetro protraimento da wglUseFontOutlines .

Também pode especificar se pretende glifos 3-d são criados com segmentos de linha ou polígonos. Para indicar wglUseFontOutlines para criar imagens 3-d com segmentos de linhas, especificar WGL_FONT_LINES no parâmetro de formato. Para criá-los com polígonos, especifique WGL_FONT_POLYGONS.

Eis um exemplo que mostra como criar um conjunto de listas de visualização para desenhar os caracteres do tipo de letra TrueType Arial como um conjunto de polígonos:
   LOGFONT     lf;
   HFONT       hFont, hOldFont;
   GLYPHMETRICSFLOAT agmf[256];

   // An hDC and an hRC have already been created.
   wglMakeCurrent( hDC, hRC );

   // Let's create a TrueType font to display.
   memset(&lf,0,sizeof(LOGFONT));
   lf.lfHeight               =   -20 ;
   lf.lfWeight               =   FW_NORMAL ;
   lf.lfCharSet              =   ANSI_CHARSET ;
   lf.lfOutPrecision         =   OUT_DEFAULT_PRECIS ;
   lf.lfClipPrecision        =   CLIP_DEFAULT_PRECIS ;
   lf.lfQuality              =   DEFAULT_QUALITY ;
   lf.lfPitchAndFamily       =   FF_DONTCARE|DEFAULT_PITCH;
   lstrcpy (lf.lfFaceName, "Arial") ;

   hFont = CreateFontIndirect(&lf);
   hOldFont = SelectObject(hDC,hFont);

   // Create a set of display lists based on the TT font we selected
   if (!(wglUseFontOutlines(hDC, 0, 255, GLF_START_LIST, 0.0f, 0.15f,
      WGL_FONT_POLYGONS, agmf)))
        MessageBox(hWnd,"wglUseFontOutlines failed!","GLFont",MB_OK);

   DeleteObject(SelectObject(hDC,hOldFont));
   .  .  .  .
   .  .  .  .
   .  .  .  .
   .  .  .  .
				
para apresentar estes caracteres 3-d numa cadeia, utilize o seguinte código:
   // Display string with display lists created by wglUseFontOutlines()
   glListBase(GLF_START_LIST); // indicate start of display lists

   // Draw the characters
   glCallLists(6, GL_UNSIGNED_BYTE, "OpenGL");
				

A informação contida neste artigo aplica-se a:
  • Microsoft Win32 Application Programming Interface nas seguintes plataformas
    • Microsoft Windows NT Server 3.51
    • Microsoft Windows NT Server 4.0 Standard Edition
    • Microsoft Windows NT Workstation 3.51
    • Microsoft Windows NT Workstation 4.0 Developer Edition
    • Microsoft Windows 98 Standard Edition
    • Microsoft Windows 95
Palavras-chave: 
kbmt kbfile kbinfo KB131024 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 131024  (http://support.microsoft.com/kb/131024/en-us/ )