OpenGL中的简单文本(不含GLUT)

Ben*_*Ben 7 opengl text

我正在用C++,SDL和OpenGL制作一个简单的2D平台游戏,现在我想在屏幕上显示文字,例如点,计时器,简单消息.

在各种网站上,我已经读过Bitmap Fonts可能是这样做的方法,但有人可以给我一个直截了当,易于理解的例子,说明如何在OpenGL中使用它们向屏幕输出测试消息?

编辑:我发现了一些有趣的东西,FTGL.教程(第2个链接)中的示例代码看起来非常简单.无法让它工作,但稍后会再回到它.

FTGL是一个免费的跨平台开源C++库,它使用Freetype2来简化OpenGL应用程序中的字体渲染.FTGL支持位图,像素图,纹理贴图,轮廓,多边形网格和拉伸多边形渲染模式.

  1. http://sourceforge.net/projects/ftgl/
  2. http://ftgl.sourceforge.net/docs/html/ftgl-tutorial.html
  3. http://nehe.gamedev.net/tutorial/freetype_fonts_in_opengl/24001/

Max*_*sky 1

您必须创建一个位图图像,其中包含要使用的所有字符。最简单的方法是使用固定宽度的字体。然后对于每个字母,您绑定纹理的该部分。我几年前在 Pascal/OpenGL 中编写过这样的代码,将搜索它并发布

编辑这里是代码

procedure DisplayString(str: string; l: integer; active: integer; align: integer);
var i,n: integer;
s: string;
begin
  glPushMatrix;
  glTranslatef(0,-l,0);
  if align=1 then glTranslatef(-15,0,0); //left alignment
  if align=3 then glTranslatef(15,0,0);//right aligment
  s:=uppercase(str); // the font is uppercase only
  for i:=1 to length(str)-4 do begin
   n:=ord(s[i]); // get the ASCII code of letter
   glTranslatef(1,0,0);
   if n=32 then continue; //space
   if (n>=48) and (n<=58) then n:=n-47; // translate ascii code to the
   if (n>=65) and (n<=90) then n:=n-53; // corresponding position in the bitmap
      if active=0 then glBindTexture(GL_TEXTURE_2D, font2) // two different font files used
    else glBindTexture(GL_TEXTURE_2D, font);
    glBegin(GL_QUADS); // 1850 is the total width of the bitmap image, 50 is one character
     glTexCoord2f(((n-1)*50/1850)-1, 0.0); glVertex3f(0.0, 0.0,  1.0);
     glTexCoord2f((n*50/1850)-1, 0.0); glVertex3f(1.0, 0.0,  1.0);
     glTexCoord2f((n*50/1850)-1, 1.0); glVertex3f(1.0, 1.0,  1.0);
     glTexCoord2f(((n-1)*50/1850)-1, 1.0); glVertex3f(0.0, 1.0,  1.0);
    glEnd();
    end;
   glPopMatrix;
end;
Run Code Online (Sandbox Code Playgroud)

  • 因为OpenGL无法渲染它们。您可以为此使用附加库。查看此常见问题解答:http://www.opengl.org/resources/faq/technical/fonts.htm (5认同)