opengl学习(二)--画布和画笔

不管是我们玩的游戏,看到电影,林林总总的计算机图形,它们有着大量优美着色的曲线或者表面,在opengl里面,却都是通过一些基本图形元素组成的,比如直线,再比如多边形。

就好比画画,画之前是要做一些准备工作的。至少我们要有一张画纸,承载我们要画的图形。但是计算机跟真实的画纸是不一样的。纸是白色的,直接花就好;在计算机世界里,这张画布是一块内存,保存着我们之前已经画上去的图像,为了重新画我们需要的东西,我们需要先将之前的图像都清除。

一般而言,将它清除为我们需要的某种颜色既可。比如是描绘黑夜,那就将清除颜色设置为黑色;绘制蓝天就将背景颜色设置为蓝色等等。当然如果是要将背景进行被图形覆盖的话,背景色清除成什么颜色就无所谓了。

当我说到这里,是不是有人要问,既然可以被图形覆盖,那我画个大矩形框不就可以了。当然,没有问题,真的。但是(好吧,肯定是要转折的啦),从效率上将,调用几个清除函数比画矩形框要快的多。而且,openGL中,程序员可以任意的改变系统坐标位置,观察角度,观察位置等等,如果是这种情况,这个矩形框设多大呢,放在哪里合适呢?还是乖乖清除为某种颜色吧,亲,方便呢~

下面来介绍一下清楚函数。先看一个例子[/size][size=large][size=small][/size]

   
glClearColor(0.0,0.0,0,0.0);
glClear(GL_COLOR_BUFFER_BIT)

这两句代码是讲,将窗口清除为黑色。第一句是设置清除颜色;第二句则是把窗口清除为当前颜色。glClear()只有一个参数,指定需要清除的缓冲区。这个例子里需要清除的只是当前背景颜色,所以,界面上显示的图形界面还可以看到,只是背景变为了黑色。

缓冲区类型如下表:

缓冲区名称颜色缓冲区GL_COLOR_BUFFER_BIT深度缓冲区GL_DEPTH_BUFFER_BIT积累缓冲区GL_ACCUM_BUFFER_BIT模板缓冲区GL_STENCIL_BUFFER_BIT

OpenGL允许同时清除多个缓冲区。这就好比捡豆子,多种颜色的豆子,捡的过程中,将它们一一放入不同的盘子和每次只捡一种颜色放入盘子,哪个更快一些?

使用时,缓冲区值是以或的方式进行的。其它三种缓冲区设置值的函数后续用到时再提及,因还未学习透彻,在此先不讲述。

讲完画布,我们来看一看计算机中的画笔。其实也不能算是画笔,只能说是画笔的颜色。我们将背景清除为一种颜色,并不代表我们画出来的那个物什它也需要这种颜色。而且一般而言,物体的颜色是五颜六色的,所以需要有一个函数不停的更替画笔颜色。

glColor3f(float red,float green, float blue);

这个函数就是用来设置颜色的,每个参数的取值都在0.0~1.0之间,分别代表红绿蓝。

需要注意的是,如果画完一个物体,再不指定新的颜色的情况下,下一个物体的颜色会沿用之前设置的颜色,直至重新设置画笔颜色为止。

相关推荐