OpenGL超级宝典笔记4

来源:互联网 发布:淘宝众筹便宜么 编辑:程序博客网 时间:2024/06/11 18:48


第六章 颜色和材料的更多细节

学习如何使用混合来创建透明和反射表面,使用OpenGL的混合和多重采样特性实现点、直线和多边形的抗锯齿处理。还学习OpenGL如何支持其他的颜色操作,如何使用alpha测试丢弃部分片段。

a) 组合颜色 当混合功能被启用时,源颜色和目标颜色的组合方式是由混合方程式控制的。在默认情况下,混合方程式如下:Cf = Cs x S+Cd x D),其中Cf是最终计算产生的颜色,Cs是源颜色,Cd是目标颜色。函数如下:glBlendFunc(GLenum s, GLenum D);

b) 抗锯齿 这是混合的另外一个用途。为了消除元图之间的锯齿状边缘,OpenGL使用混合功能来混合片段的颜色,也就是把像素的目标颜色与周围的颜色进行混合。设置混合函数如下:glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);glBlendFunc()函数默认设置为GL_ADD.多重采样方法,更方便解决整个场景进行抗锯齿处理,glEnable(GL_MULTISAMPLE);打开多重采样,同样用glDisable来关闭。

c) 应用雾 可以实现逐渐变模糊的效果。glEnable(GL_FOG);//打开雾效果glFogfv(GL_FOG_COLOR, flowLighr);//设置雾颜色,与背景匹配。

d) 累积缓冲区 允许在渲染到颜色缓冲区之后不是吧结果显示到窗口上,而是把颜色缓冲区的内容复制到累积缓冲区。以下函数控制累积缓冲区的行为:void glAccum(GLenum op, GLfloat value);第一个参数指定哪种累积操作,第二个参数是浮点值,用于对操作进行缩放。

e) 其他颜色操作 包括颜色掩码,颜色逻辑操作,alpha测试,抖动。

 

 

第七章 OpenGL中的图像

学习OpenGL对彩色图像操作提供的方法,从颜色缓冲区直接读取位图图像以及把位图图像写入到颜色缓冲区、颜色处理操作以及颜色查找映射,还有图像处理子集。

a)   设置光栅位置glRasterPos2(GLint x, GLint y);glBitmap函数把参数所提供的位图复制到颜色缓冲区的当前光栅位置,并可以进行一个可选的操作,同时推进光栅位置。Void glBitmap(GLsize width, GLsize height, GLfloat xorig , GLfloat yorig, GLfloat xmove , GLfloat ymove , GLubye *bitmap);xorig,yorig这是位图的原点,xmoveymove为偏移量。 

b)   像素图 每个像素可以由超过一个位的存储空间来表示,每个像素多出来的这些位可以存储这个像素的强度或者颜色成分值。Void glDrawPixels(GLsizei width, GLsizei height , GLenum format, GLenum type , const void *pixels);第三个参数指定了图像数据的格式,接下来是图像数据的数据类型,然后是一个指向数据本身的指针。

c) 图像的更多乐趣 像素缩放:void glPixelZoom(GLfloat xfactor , GLfloat yfactor);参数为缩放数量。像素转移: void glPixelTransferi(GLenum pname, GLint param);void glPixelTransferf(GLenum pname, GLfloat param);偏转值会加到颜色成分值中。像素映射:glPixelMapuiv(GLenum map, GLint mapsize , GLuint *values);(只列出其中一种)任一种颜色可以转换成另外一种颜色值,可以用于彩色修正等。

d) 图像“子集” 根据功能可以分为3个主要领域:颜色矩阵和颜色表、卷积以及柱状图。颜色矩阵,可以把颜色值看成色彩空间中的坐标,这样RGB就近似于一个在颜色立方体中以这三种颜色为轴的XYZ坐标系统,alpha颜色成分看成是W成分,函数glMatrixMode(GL_COLOR);颜色表:void glColorTable (GLenum target, GLenum internalFormat, GLsizei width , GLenum format, GLenum type, const GLvoid *table);一个包含各个颜色值的表格,用于替换一个像素的当前颜色。卷积是图像处理管线的一部分,可以与其他图像处理操作进行组合,例如锐化卷积和浮雕卷积。