线贴一个简单可用的opengl文字显示调用函数
opengl文字显示大致三步:
1,创建字体
2,输出打印
3,删除字体
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(wglGetCurrentDC(), font); // 选择我们需要的字体
wglUseFontBitmaps(wglGetCurrentDC(), 0, 256, base); // 创建96个显示列表,绘制从ASCII码为32-128的字符
SelectObject(wglGetCurrentDC(), oldfont);
DeleteObject(font);
}
其中base是一个全局变量
GLuint base; // 绘制字体的显示列表的开始位置
2,打印函数
/*
* glPrint
* 自定义GL输出函数
*/
void glPrint(const char *pstr)
{
glPushAttrib(GL_LIST_BIT); // 把显示列表属性压入属性堆栈
glListBase(base - 0); // 设置显示列表的基础值
glCallLists(strlen(pstr), GL_UNSIGNED_BYTE, pstr); // 调用显示列表绘制字符串
glPopAttrib(); // 弹出属性堆栈
}
3,删除字体
GLvoid KillFont(GLvoid)
{
glDeleteLists(base, 256);
}
在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(); // 删除字体
以上是一个可以直接使用的opengl显示文字的相关函数。