OpenGL绘图过程简述

OpenGL绘图的基本过程是:清除缓冲区,设置当前颜色,绘制几何图元,输出图形

 

一、清除缓冲区

缓冲区是用来保存绘图过程中产生的图像数据的内存区域,OpenGL有颜色、深度、累积和模板等四种常用的缓冲区。这里只介绍颜色缓冲区和深度缓冲区的清除方法。

由于缓冲区中可能保留有上一次绘图遗留下来的图像数据,这些数据会影响本次绘图,因此在绘制新图之前必须将它们清除掉。颜色缓冲区中存放的是图像的像素颜色数据,深度缓冲区存放的是用于图像消隐的深度信息。在一个三维场景中,距离视点较近的物体可能部分地或全部地遮挡住距离视点较远的物体。将被遮挡的部分小曲不显示的技术成为图像消隐技术。实现图像消隐最简单的方法是使用深度缓冲区(Z-Buffer),清除深度缓冲区的目的是使消隐工作能正确地进行。一般情况下需要清除的缓冲区就是这两个缓冲区。

清除缓冲区的工作分两步进行。

1)设置清除值。清除值是在清除缓冲区时用来填充缓冲区的数据。设置颜色缓冲区清除值的函数是glClearColor(),它有四个浮点型参数,分别表示清除值的R、G、B、A分量的值,默认值全为0。其中第四个参数A表示Alpha值,主要用于融合,一般把它设为0。如果使用整个窗口作为OpenGL的绘图区域,则可以将颜色缓冲区的清除值看作是窗口的背景颜色。设置深度缓冲区清除值的函数是glClearDepth(),它只有一个参数,即深度清除值,取值范围为[0.01,1.0],默认值为1.0。

2)清除缓冲区。清除缓冲区使用的函数是glClear(),它只有一个参数,表示将要清除的缓冲区的种类,可取的值有GL_COLOR_BUFFER_BIT(颜色缓冲区)、GL_DEPTH_BUFFER_BIT(深度缓冲区)、GL_ACCUM_BUFFER_BIT(累积缓冲区)、GL_STENCIL_BUFFER_BIT(模板缓冲区)。这些值也可以用逻辑或组合起来使用,实现一次清除多个缓冲区。

 

二、设置颜色

根据需要设置当前颜色。一旦一种颜色被设置为当前颜色,其后所有物体都将用该颜色绘出,直到当前颜色被设置为新的颜色为止。设置颜色的函数是glColor()。

 

三、绘制几何图形

OpenGL中用于绘图的函数有很多,这里只介绍基本几何图元的绘图函数。在glBegin()和glEnd()函数之间调用基本图元函数完成点、线、和多边形的绘制。glBegin()函数原型是:

void glBegin(GLenum mode);

其中mode表示几何图元的类型,取值如下表。

glEnd()函数原型是:

void glEnd(void);

在glBegin()和glEnd()之间,只能调用下表所列的函数,调用其他函数会导致OpenGL错误。glBegin()和glEnd()函数必须成对使用,否则可能导致不可预期的错误。

 

四、图形输出

glFlush()函数启动OpenGL绘图命令的执行,并将图形光栅化后输出在设备上。如果OpenGL工作在双缓冲模式下,缓冲区切换函数(SwapBuffers())隐含执行glFlush()。

posted on 2010-06-17 19:15  小交响曲  阅读(3282)  评论(0编辑  收藏  举报

导航