zoukankan      html  css  js  c++  java
  • 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!=''; ++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;
    }
  • 相关阅读:
    JTAG的SWD接线方式
    Qt のEXecl
    人脸识别
    Qt实现基本QMainWindow主窗口程序
    Qt学习之路MainWindow学习过程中的知识点
    QT_FORWARD_DECLARE_CLASS
    标准的并发控制实现
    C++ DFS
    C# 互操作(一) 编写一个C++ COM组件
    Socket使用SOAP调用WCF
  • 原文地址:https://www.cnblogs.com/xiaoyusmile/p/3581976.html
Copyright © 2011-2022 走看看