OPENGL没有提供直接绘制文字的功能,须要借助于操做系统。windows
用OPENGL绘制文字比较常见的方法是利用显示列表。建立一系列显示列表,每一个字符对应一个列表编号。例如,'A'对应列表编号1000+'A',‘B’对应列表编号1000+'B',以此类推。绘制一个字符串时,依次调用字符串中每一个字符所对应的列表编号。函数
在Windows操做系统上,可使用wglUseFontBitmaps函数来批量的产生显示字符用的显示列表。oop
下面给出一个示例代码。该代码时在OPENGL红宝书示例程序的基础上进行修改,只作示例之用。在实际的程序中使用时,须要根据具体的需求进行修改。ui
运行此程序的环境配置参考OPENGL红宝书中示例程序的环境配置。spa
#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; }