opengl文字显示

来源:互联网 发布:淘宝退款影响信誉吗 编辑:程序博客网 时间:2024/06/05 14:45
线贴一个简单可用的opengl文字显示调用函数

opengl文字显示大致三步:

1,创建字体

2,输出打印

3,删除字体


1,创建字体的函数:

  1. /* 
  2.  * BuildFont 
  3.  *      创建位图字体 
  4.  */  
  5. GLvoid BuildFont(GLvoid)  
  6. {  
  7.     HFONT font;     // 字体句柄  
  8.     HFONT oldfont;  
  9.       
  10.     base = glGenLists(256);     // 创建96个显示列表  
  11.     font = CreateFont(-24,      // 字体高度  
  12.                         0,      // 字体宽度  
  13.                         0,      // 字体的旋转角度  
  14.                         0,      // 字体底线的旋转角度  
  15.                         FW_BOLD,// 字体重量  
  16.                         FALSE,  // 是否使用斜体  
  17.                         FALSE,  // 是否使用下划线  
  18.                         FALSE,  // 是否使用删除线  
  19.                         ANSI_CHARSET,   // 设置字符集  
  20.                         OUT_TT_PRECIS,  // 输出精度  
  21.                         CLIP_DEFAULT_PRECIS,    // 剪裁精度  
  22.                         ANTIALIASED_QUALITY,    // 输出质量  
  23.                         FF_DONTCARE|DEFAULT_PITCH,    
  24.                         "Courier New"); // 字体名称  
  25.     oldfont = (HFONT)SelectObject(wglGetCurrentDC(), font); // 选择我们需要的字体  
  26.     wglUseFontBitmaps(wglGetCurrentDC(), 0, 256, base);     // 创建96个显示列表,绘制从ASCII码为32-128的字符  
  27.     SelectObject(wglGetCurrentDC(), oldfont);  
  28.     DeleteObject(font);  
  29.   
  30. }  

其中base是一个全局变量

GLuint base;  // 绘制字体的显示列表的开始位置


2,打印函数

  1. /* 
  2.  * glPrint 
  3.  *      自定义GL输出函数 
  4.  */  
  5. void glPrint(const char *pstr)  
  6. {  
  7.     glPushAttrib(GL_LIST_BIT);  // 把显示列表属性压入属性堆栈  
  8.     glListBase(base - 0);       // 设置显示列表的基础值  
  9.     glCallLists(strlen(pstr), GL_UNSIGNED_BYTE, pstr);  // 调用显示列表绘制字符串  
  10.     glPopAttrib();              // 弹出属性堆栈  
  11.   
  12. }  


3,删除字体

  1. GLvoid KillFont(GLvoid)  
  2. {  
  3.     glDeleteLists(base, 256);   
  4. }  

在InitGL()中添加创建字体的代码:

BuildFont();

在DrawGLScene()中添加代码:

 glTranslatef(0.0f, 0.0f, -1.0f);
 glColor3f(0.0f, 1.0f, 0.0f); // 颜色
 glRasterPos2f(-0.4f, 0.30f); // 输出位置
 glPrint("Active OpenGL Text With NeHe - %7.2f", cnt1);  // 输出文字到屏幕
在KillGLWindow()中添加删除字体的代码:

KillFont();  // 删除字体


0 0
原创粉丝点击