OpenGL红皮书学习——状态管理和绘制几何图形

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命令完成执行,执行完之后,函数返回。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值