`
admg36admg
  • 浏览: 11674 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

OpenGL文字显示

 
阅读更多

OpenGL文字显示
2010年06月22日
  本文参考NeHe第13课图像字体。
  大致三步: 1. 创建字体的函数: /* * BuildFont * 创建位图字体 */ GLvoid BuildFont(GLvoid) { HFONT font; // 字体句柄 HFONT oldfont; base = glGenLists(256); // 创建96个显示列表 font = CreateFont(-24, // 字体高度 0, // 字体宽度 0, // 字体的旋转角度 0, // 字体底线的旋转角度 FW_BOLD,// 字体重量 FALSE, // 是否使用斜体 FALSE, // 是否使用下划线 FALSE, // 是否使用删除线 ANSI_CHARSET, // 设置字符集 OUT_TT_PRECIS, // 输出精度 CLIP_DEFAULT_PRECIS, // 剪裁精度 ANTIALIASED_QUALITY, // 输出质量 FF_DONTCARE|DEFAULT_PITCH, "Courier New"); // 字体名称 oldfont = (HFONT)SelectObject(hDC, font); // 选择我们需要的字体 wglUseFontBitmaps(hDC, 0, 256, base); // 创建96个显示列表,绘制从ASCII码为32-128的字符 SelectObject(hDC, oldfont); DeleteObject(font); } 其中base是一个全局变量
  GLuint base;  // 绘制字体的显示列表的开始位置
  关于CreateFont的使用,请网上查找相关资料。
  2. 打印函数
  这里定义了一个类似C语言printf的一个参数可变的函数,需要stdarg.h文件: /* * glPrint * 自定义GL输出函数 */ GLvoid glPrint(const char *fmt, ...) { char text[256]; // 保存字符串 va_list ap; // 指向一个变量列表的指针 if (fmt == NULL) return; va_start(ap, fmt); // 分析可变参数 vsprintf(text, fmt, ap); // 把参数值写入字符串 va_end(ap); glPushAttrib(GL_LIST_BIT); // 把显示列表属性压入属性堆栈 glListBase(base - 0); // 设置显示列表的基础值 glCallLists(strlen(text), GL_UNSIGNED_BYTE, text); // 调用显示列表绘制字符串 glPopAttrib(); // 弹出属性堆栈 } 3. 删除字体 /* * KillFont * 删除显示列表 */ GLvoid KillFont(GLvoid) { glDeleteLists(base, 256); } 在InitGL()中添加创建字体的代码: 在DrawGLScene()中添加代码: 在KillGLWindow()中添加删除字体的代码:
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics