OpenGL是一个状态机(不懂有限状态机概念的朋友自行百度), 可以设置他的各种状态(或模式),然后让这些状态一直生效,知道再次被修改,比如当前颜色设置为白色,再次之后所绘制的所有物体都用这种颜色,知道当前颜色被再次改变。每个状态变量都有一个默认值, OpenGL提供相应的获取方法。
图形绘制有两种模式
1) 调用绘制函数,所绘制的物体会立即被绘制并且显示。成为立即模式
2) 将绘制命令保存在一个列表中,然后再统一绘制
一般情况下,OPenGL默认的是前一种模式,立即模式更容易编程,但后一种模式具有更高的效率。
这让我想起了more effective C++ 中讲过的lazy evaluation 和 分期摊还期望de计算这两章, 前者的主要思想是要计算的东西在真正用的时候再去计算或者创建, 而后者的主要思想是 有些时候调用某些操作,会占用大量的系统资源, 这种情况下应该所操作的对象变化的时候就计算一次,这样在用的时候就只需要很少了的操作了——称之为分期摊还。
绘图工具箱:
1 清除窗口
在计算机中,保存图片的内存通常被计算机所绘制的前一副图片所占用,因此绘制新场景之前, 都需要将其清除为一种特定的颜色。
glClearColor(0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
第一行将清除颜色设置为黑色,第二行代码为清除当前颜色缓冲区, 并将窗口设置为当前的清除颜色。
记得OpenGL是个有限状态机, 当前清除颜色就是系统中存放的状态变量。glClearColor功能即是修改此变量。所以以后每次清除缓冲区时就不必重新调用glClearColor了
常用的缓冲区有一下几种
颜色缓冲区 GL_COLOR_BUFFER_BIT
深度缓冲区 GL_DEPTH_BUFFER_BIT
累计缓冲区 GL_ACCUM_BUFFER_BIT
模板缓冲区 GL_STENCIL_BUFFER_BIT
当然对应的缓冲区有相应的设置函数 比如 glClearDepth(), glClearAccum(), glClearStencil(), 具体含义等以后学到的时候就会提到
2 指定颜色
在OpenGL中,物体的颜色与物体的形状无关。当一个特定的物体被绘制时,就会根据当前指定的颜色方案对其绘制。故应当先设置颜色或颜色方案,然后再绘制物体。同当前清除颜色类似,在这种颜色或颜色方案被修改之前,所绘制的物体都会使用当前色颜色方案。
glColor3f(1.0, 0.0, 0.0); //注:三个参数均为0.0~1.0的浮点型值,分别表示红、绿、蓝三种成分。
将红色置为当前颜色,
3 强制完成绘图操作:
void glFlush();
强制以前发送的OpenGL命令完成执行,执行完之后,函数返回。