累积缓冲区与其他颜色操作(2)

DrawGeometry函数绘制了场景中的所有几何图元。在RenderScene中反复调用这个函数,并把结果累积到累积缓冲区中。在最后,拷贝回到颜色缓冲区,然后glutSwapBuffers显示到屏幕上:

image

其他颜色操作 颜色掩码

在计算后的最终颜色将要写入到颜色缓冲区时,OpenGL允许你通过glColorMask函数来屏蔽掉其中的一个或多个通道值。

void glColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);

参数分别代表红、绿、蓝、alpha通道。当传的参数是GL_TRUE时,表示允许往这个通道的写值,如果为GL_FALSE则阻止往该通道写值。

颜色逻辑操作

许多2D的图形API允许源颜色和目的颜色进行逻辑操作。OpenGL也支持这种操作:

void glLogicOp(GLenum op);

还需要通过glEnable(GL_COLOR_LOGIC_OP);来开启。OpenGL在默认情况下是关闭的。关闭操作是相应的glDisable

op允许的操作如下表:

参数值   操作  
GL_CLEAR   0  
GL_AND   s & d  
GL_AND_REVERSE   s & ~d  
GL_COPY   s  
GL_AND_INVERTED   ~s & d  
NOOP   d  
XOR   s xor d  
OR   s | d  
NOR   ~(s | d)  
GL_EQUIV   ~(s xor d)  
GL_OR_REVERSE   s | ~d  
GL_COPY_INVERTED   ~s  
GL_OR_INVERTED   ~s | d  
GL_NAND   ~(s & d)  
SET   all 1s  

Alpha 测试

Alpha测试允许你告诉OpenGL那些在Alpha测试不通过的输入片段将被废弃。那些被废弃的片段不会写入到颜色缓冲区,深度缓冲区,模板缓冲区和累积缓冲区中。那些alpha值很低的片段可能是不可见的,因此我们可以过滤掉它,不写入到缓冲区中,可以提高性能。

alpha测试值和比较函数可以通过glAlphaFunc指定:

void glAlphaFunc(GLenum func, GLclampf ref);

ref的取值范围为[0.0, 1.0].可以指定的比较方式如下表:

比较方式   描述  
GL_NEVER   永远不通过  
GL_ALWAYS   一直通过  
GL_LESS   小于ref  
GL_LEQUAL   小于等于ref  
GL_EQUAL   等于ref  
GL_GEQUAL   大于等于ref  
GL_GREATER   大于ref  
GL_NOTEQUAL   不等于ref  

行为与glDepthFunc函数相似。可以通过glEnable/glDisable来开启和关闭alpha测试,参数值是GL_ALPHA_TEST。

抖动

抖动允许只有少量离散颜色的显示系统来模拟更宽范围的颜色。例如,灰色可以通过白点和黑点的混合来模拟。白点多于黑点呈现浅灰色,黑点多于白点呈现深灰色。这种技巧对于只支持8位和16位的显示系统非常有用。抖动的效果可以大幅度地改善低端颜色系统的图像质量。在默认情况下,抖动是打开的。可以通过glEnable(GL_DITHER)/glDisable(GL_DITHER)来打开或关闭它。在高颜色分辨率的显示系统中,OpenGL的实现可能不需要抖动,会禁用抖动来避免性能的开销。

OpenGL超级宝典 第4版 中文版PDF+英文版+源代码 见 

OpenGL编程指南(原书第7版)中文扫描版PDF 下载

OpenGL 渲染篇

Ubuntu 13.04 安装 OpenGL

OpenGL三维球体数据生成与绘制【附源码】

Ubuntu下OpenGL编程基础解析

如何在Ubuntu使用eclipse for c++配置OpenGL  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/64b5e0c65c0817442626061b48d34825.html