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; }