零基础入门OpenGL系列教程(五、早期OpenGL点线面)

上一篇讲到简单的用OpenGL绘图,这次我们更深入的了解一下早期的OpenGL绘图方式。本篇内容讲述如何用OpenGL绘制图元。

绘图的基础是图元,而图元的基础就是一个一个的像素点。首先介绍一下点的画法,只要在void glBegin(GLenum mode)函数中传入GL_POINTS就行了。

void display()
{
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POINTS);
    glColor3f(1.0f, 1.0f, 1.0f);
    glVertex2f(0.0f, 0.0f);
    glEnd();
    glFlush();
}

这是我的回调函数,我将背景色设置成黑板色,在正中间画了一个白点。需要注意的是参数是GL_POINTS,而不是GL_POINT,无论你绘制多少点。

直线

画直线也是和点一样的原理,只不过换了一个参数。

void display()
{
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_LINES);
    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex2f(-0.3f, 0.0f);
    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex2f(0.3f, 0.0f);
    glEnd();
    glFlush();
}
线

这是画不相连的线段,还可以画相连的折线。

void display()
{
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_LINE_STRIP);
    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex2f(-0.3f, 0.0f);
    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex2f(0.3f, 0.0f);
    glColor3f(0.0f, 0.0f, 1.0f);
    glVertex2f(0.1f, 0.3f);
    glEnd();
    glFlush();
}
折线

用同样的方法可以画闭合的折线段GL_LINE_LOOP

画面就是画各种多边形了,最一般的就是传多边形参数GL_POLYGON

void display()
{
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);
    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex2f(-0.3f, 0.0f);
    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex2f(0.3f, 0.0f);
    glColor3f(0.0f, 0.0f, 1.0f);
    glVertex2f(0.1f, 0.3f);
    glColor3f(1.0f, 0.0f, 1.0f);
    glVertex2f(-0.5f, 0.2f);
    glEnd();
    glFlush();
}

随手画的多边形,看看效果。

多边形

还可以制定多边形的种类,比如说三角形GL_TRIANGLES和四边形GL_QUADS

void display()
{
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_TRIANGLES);
    glColor3f(1.0f, 0.0f, 0.0f);
    glVertex2f(-0.3f, 0.0f);
    glColor3f(0.0f, 1.0f, 0.0f);
    glVertex2f(0.0f, 0.0f);
    glColor3f(0.0f, 0.0f, 1.0f);
    glVertex2f(-0.1f, 0.3f);
    glEnd();
    glBegin(GL_QUADS);
    glColor3f(1.0f, 0.0f, 1.0f);
    glVertex2f(0.5f, 0.2f);
    glColor3f(0.0f, 1.0f, 1.0f);
    glVertex2f(0.7f, 0.3f);
    glColor3f(1.0f, 1.0f, 0.0f);
    glVertex2f(0.5f, -0.3f);
    glColor3f(0.5f, 1.0f, 0.5f);
    glVertex2f(0.2f, -0.5f);
    glEnd();
    glFlush();
}

我把这两个图元画在了同一张画板上,看一下效果。

三角形和四边形

利用OpenGLAPI和C语言相结合,可以画基础图元以外的图形,比如说圆。

void display()
{
    glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    GLint circle_points = 100;
    glBegin(GL_POLYGON);
    for (int i = 0; i < circle_points; i++) {
        GLfloat angle = 2*PI*i/circle_points;
        glColor3f(cos(angle), sin(angle), 0.5f);
        glVertex2f(cos(angle), sin(angle));
    }
    glEnd();
    glFlush();
}

效果图如下。


这一篇主要讲了基础图元绘制,是基础中的基础,下一篇我想讲绘制属性等。其实我也想快速进入现代OpenGL部分,但是课堂上要求用GLUT不能跳过啊。。。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容