1.4 OpenGL是一个状态机

OpenGL是一个状态机。

状态机

就是状态转移图。举个最简单的例子。人有三个状态健康,感冒,康复中。触发的条件有淋雨(t1),吃药(t2),打针(t3),休息(t4)。所以状态机就是健康-(t4)->健康;健康-(t1)->感冒;感冒-(t3)->健康;感冒-(t2)->康复中;康复中-(t4)->健康,等等。就是这样状态在不同的条件下跳转到自己或不同状态的图。

状态机的分类

状态机简写为FSM(Finite State Machine),主要分为2大类:
第一类,若输出只和状态有关而与输入无关,则称为Moore状态机;
第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机。

OpenGL是一个状态机

OpenGL中有很多状态,比如当前颜色是一种状态,你可以设置它的状态,然后这些状态会一直生效,直到你改变它的状态。
状态的改变,会影响OpenGL的输出。比如
glColor3f(1.0, 1.0, 1.0);
glBegin(GL_LINES);
glVertex3f(-1.0, 0.0, 0.0);
glVertex3f(1.0, 0.0, 0.0);
glEnd();

 这样画出来的线是白色的。 
而如果使用
glColor3f(1.0, 0.0, 0.0);
glBegin(GL_LINES);
glVertex3f(-1.0, 0.0, 0.0);
glVertex3f(1.0, 0.0, 0.0);
glEnd();
这样画出来的线是红色的线。
这两者的区别就是使用 glColor3f设置的颜色不同,颜色状态影响到了最终的输出。

状态变量的查询

OpenGL有众多的状态,每个状态都对应一个状态变量,每个状态变量都有默认值。在任何时候都可以向系统查询每个状态变量的当前值。
通过下面这6个函数之一来完成查询任务:glGetBooleanv(),glGetDoublev()、glGetIntegerv(), glGetFloatv(), glGetPointerv()或glIsEnabled()。这6个函数是通用的查询函数。这几个函数,前5个函数,只是类型不同,后面一个函数,判断某项功能是否开启。
有些状态变量还有更为特定的查询函数(例如glGetLight*()、glGetError()或glGetPolygonStipple()等)。
如果对状态变量进行临时修改,可以使用glPushAttrib()、glPushClientAttrib()函数把状态变量的集合保存到一个属性栈中,对它们进行临时的修改,以后再用glPopAttrib()或glPopClientAttrib()恢复这些值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值