作为一个状态机的OpenGL

OpenGL是以状态机来实现的.你输入的各种不同的状态会一直保留到当你再次改变它们.那么现在你知道了,比如像"当前颜色"之类的东西其实也就是一个状态变量.你可以设置你想要的任何颜色,白色,红色,黄色等等.当然如果你一直没有改变这一状态,后面所有被绘制的物件都将以这一颜色状态显示. 
"当前颜色"仅仅只是保持OpenGL可以出色运作所需众多状态变量中很小的一个.你更可以控制一些比如观察,投影之类的变换;线,图形的绘制模式;独一无二的灯光;美伦美奂的物体材质. 
在OpenGL中有许多的状态都依靠glEnable()或者glDisable()来控制.每一个状态变量或方式都有一个预先定义的值.当然,你也可以通过一些特定函数来对当前的状态进行查询.通常,你可以使用以下六个之一个典型命令来完成这一需要: 
glGetBooleanv(),glGetDoublev(),glGetFloatv(), 
glGetInterv(),glGetPointerv(),glIsEnable(). 
他们依靠你输入的数据类型来回答关于某个状态的情况.一些状态有特殊的查询命令(比如glGetLight*(),glGetError(),glGetPolygonStipple()等等). 
另外!!你可以通过压栈命令(glPushAttrib(),glPushClientAttrib())的方式临时修改他们,不久后又恢复(glPopAttrib(),glPopClientAttrib())他们.对于一些临时改变,他们往往更加的有效率. 
关于状态机 
一般来讲,一个状态机的设计模式包含: 
1.一组状态集(states), 
2.一个起始状态(start state), 
3.一组输入符号集(alphabet), 
4.一个映射输入符号和当前状态到下一状态的转换函数(transition function)的计算模型. 
当输入符号串,模型随即进入起始状态。它要改变到新的状态,依赖于转换函数。在有限状态机中,会有有许多变量,例如,状态机有很多与动作(actions)转换(Mealy机)或状态(摩尔机)关联的动作,多重起始状态,基于没有输入符号的转换,或者指定符号和状态(非定有限状态机)的多个转换,指派给接收状态(识别者)的一个或多个状态,等等. 
状态变化机制,状态变化实际是由Event事件驱动的,可以认为是Event-condition-State,在MVC模式一般是Event-condition-Action实现。状态模式需要封装的是Event-condition-State中的condition-State部分。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值