OpenGL是一个状态机

           OpenGL是一个状态机,尤其是如果你使用固定功能的管线。可以设置它的各种状态(或模式),然后让这些状态一直生效,直到再次修改它们。正如所看到的那样,当前颜色就是一个状态变量。可以把当前颜色设置为白色、红色或其他任何颜色,在此之后绘制的所有物体都将使用这种颜色,直到再次把当前颜色设置为其他颜色。当前颜色只是OpenGL所维护的许多状态变量之一。其他的状态变量还有很多,并且有着各自的用途,例如控制当前视图和投影变换、直线和多边形点画模式、多边形绘图模式、像素包装约定、光照的位置和特征以及被绘制物体的材料属性等。许多表示模式的状态变量可以用glEnable()和glDisable()函数进行启用和禁用。

        如果使用可编程的着色器,根据所用的OpenGL版本的不同,着色器所能识别的状态的数量也有所不同。

        每个状态变量(或模式)都有一个默认值。在任何时候都可以向系统查询每个状态变量的当前值。一般情况下,可以使用下面这6个函数之一来完成这个任务:glGetBooleanv()、glGetDoublev()、glGetIntegerv()、glGetfloatv()、glGetPointerv()、或glIsEnabled()。具体选择的函数取决于希望返回的结果的数据类型。有些状态变量还有更为特定的查询函数(例如glGetLight*()、glGetError()或glGetPolygonStipple()等)。另外,还可以使用glPushAttrib()、glPushClientAttrib()函数把状态变量的集合保存到一个属性栈中,对它们进行临时的修改,以后再用glPopAttrirb()或glPopClientAttrib()恢复这些值。如果需要对状态变量进行临时修改,就应该使用这些函数,而不是使用任何查询函数,因为前者的效率更高。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值