线的属性

线的属性有颜色、线宽及线型。

与点的大小类似,线宽也会进行类似的舍入处理,且只能在glBegin外调整。
线型是一个16位的开关,借此可以来模拟各种样式的线条。
线同样可以有颜色渐变。

#include<Windows.h>
#include<GL/glut.h>

void line()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3d(1.0, 0.0, 0.0);

    //调整线宽,注意只能在glBegin外调整
    glLineWidth(3.0);
    glBegin(GL_LINES);
    {
        glVertex2i(100, 100);
        glVertex2i(100, 200);
        glVertex2i(200, 100);
        glVertex2i(200, 200);
    }
    glEnd();

    //调整线形,16位开关(从低往高)
    glEnable(GL_LINE_STIPPLE);
    /*
    *调整线形的函数
    *@param factor    每一位重复多少次之后进入下一位
    *@param pattern    16位开关
    */
    glLineStipple(1, 0xaaaa);
    glBegin(GL_LINES);
    {
        glVertex2i(300, 300);
        glVertex2i(300, 400);
        glVertex2i(400, 300);
        glVertex2i(400, 400);
    }
    glEnd();
    glDisable(GL_LINE_STIPPLE);

    //颜色渐变
    //GL_FLAT为单色
    glShadeModel(GL_SMOOTH);
    glBegin(GL_LINE_LOOP);
    {
        glColor3d(1.0, 0.0, 0.0);
        glVertex2i(500, 200);
        glColor3d(0.0, 1.0, 0.0);
        glVertex2i(600, 373);
        glColor3d(0.0, 0.0, 1.0);
        glVertex2i(700, 200);
    }
    glEnd();
    glFlush();
}

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

    glutDisplayFunc(line);

    glutMainLoop();
}