字符图元

OpenGL中有两种字符图元,位图字体与轮廓字体。

位图字体就相当于用位图来存储每个字体,因此会显得更加不平滑,但是画起来较快。
轮廓字体则是描述字符的边界,因此放大缩小什么的也仍然很平滑,但是画起来较慢。除此之外,轮廓字体还可以放到各种场景下观察、缩放等等。
对于画轮廓字体,不能单纯地移动光栅位置来画(还没学到吧。。)

#include<Windows.h>
#include<GL/glut.h>
#include<cstring>
const char s[] = "hello world";

void drawString()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3d(0.1, 0.5, 0.8);
    const int l = strlen(s);

    //将光栅调到指定位置后,画位图字符
    glRasterPos2i(400, 300);
    for (int i = 0; i < l; ++i)
    {
        glutBitmapCharacter(GLUT_BITMAP_8_BY_13, s[i]);
    }


    //这个不能直接调光栅,后续会有介绍
    //画出轮廓字符,更清晰、但更慢。。
    /*for (int i = 0; i < l; ++i)
    {
        glutStrokeCharacter(GLUT_STROKE_ROMAN, s[i]);
    }
    */
    glFlush();
}


int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
    glutInitWindowSize(800, 600);
    glutCreateWindow("String");
    glClearColor(1.0, 1.0, 1.0, 0.0);
    glMatrixMode(GL_PROJECTION);
    gluOrtho2D(0.0, 800.0, 0.0, 600.0);
    glutDisplayFunc(drawString);
    glutMainLoop();
}