OPENGL繪制文字


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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM