您的位置:首页 > 运维架构

OPENGL绘制文字

2014-03-05 11:00 288 查看
  OPENGL没有提供直接绘制文字的功能,需要借助于操作系统。

  用OPENGL绘制文字比较常见的方法是利用显示列表。创建一系列显示列表,每个字符对应一个列表编号。例如,'A'对应列表编号1000+'A',‘B’对应列表编号1000+'B',以此类推。绘制一个字符串时,依次调用字符串中每个字符所对应的列表编号。

  在Windows操作系统上,可以使用wglUseFontBitmaps函数来批量的产生显示字符用的显示列表。

  下面给出一个示例代码。该代码时在OPENGL红宝书示例程序的基础上进行修改,只做示例之用。在实际的程序中使用时,需要根据具体的需求进行修改。

  运行此程序的环境配置参考OPENGL红宝书中示例程序的环境配置。

#include <windows.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/freeglut.h>

#define MAX_CHAR    128
GLuint TextFont;

void XPrintString(char *s)
{
glPushAttrib (GL_LIST_BIT);

//调用每个字符对应的显示列表,绘制每个字符
for(; *s!='\0'; ++s)
glCallList(TextFont + *s);

glPopAttrib ();
}

void display(void)
{
glClear(GL_COLOR_BUFFER_BIT);

glColor3f(1.0, 1.0, 1.0);

glRasterPos3f(0.5, 0.5, 0.0);
XPrintString("hello!");

glFlush();
}

void init(void)
{
glClearColor(0.0, 0.0, 0.0, 0.0);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);

//申请MAX_CHAR个连续的显示列表编号
TextFont = glGenLists(MAX_CHAR);

//把每个字符的绘制命令都装到对应的显示列表中
wglUseFontBitmaps(wglGetCurrentDC(), 0, MAX_CHAR, TextFont);
}

int main(int argc, char ** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(250, 250);
glutInitWindowPosition(100, 100);
glutCreateWindow("Hello ");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: