天天看点

OpenGL学习笔记:状态机理念

OpenGL是一种状态机模式,比如你用glEnable打开一个状态,在以后的绘图中将一直保留并应用这个状态,除非你调用glDisable及同类函数来改变该状态或程序退出。例如当前颜色是一个状态变量,可以把当前颜色设置为白色、红色或其他任何颜色,在此之后绘制的所有物体都将使用这种颜色,直到把当前颜色设置为其他颜色。

除当前颜色之外,OpenGL绝大多数函数都是一种状态机,如控制当前视图和投影变换、直线和多边形点画模式、多边形绘图模式、像素包装约定、光照的位置和特征以及被绘制物体的材料属性等。

每个状态都有一个默认值,在任何时候都可以向系统查询每个状态变量的当前值。

另外,如果需要对状态变量进行临时的修改,可以用glPushAttrib()、glPushClientAttrib()函数把状态变量的集合保存到一个属性栈中,对它们进行临时的修改,以后再用glPopAttrirb()或glPopClientAttrib()恢复这些值。