标签:
OpenGL颜色函数(下)
OpenGL 颜色数组
我们也可以在顶点数组中和坐标值混合一起指定场景的颜色值(参见2.17节)。这既可在RGB模式下也可在RGBA模式下进行。与顶点数组一样,必须先激活OpenGL的颜色数组:glEnableClientState(GL_COLOR_ARRAY);然后,对RGB模式要指定颜色分量的位置和格式:
glColorPointer(nColorComponents,dataType,offset,colorArray);参数nColorComponents赋值为3或4,依赖于是否在数组colorArray中列出RGB或RGBA颜色分量。OpenGL符号常量如GL INT或GL FLOAT赋给参数dataType来指向颜色值的数据类型。对于一个单独的颜色数组,我们可将0赋给参数offset。但是如果将颜色数据和顶点数据组合在同一个数组中,则offset的值是数组中每一组颜色分量的字节数。
typedef GLint vertex3 [3], color3 [3]; vertex3 pt [8] = {{0,0,0}, {0,1,0}, {1,0,0}, {1,1,0}, {0,0,1}, {0,1,1}, {1,0,1}, {1,1,1}}; color3 hue [8] = {{1,0,0}, {1,0,0}, {0,0,1}, {0,0,1}, {1,0,0}, {1,0,0}, {0,0,1}, {0,0,1}}; glEnableClientState (GL_VERTEX_ARRAY); glEnableClientState (GL_COLOR_ARRAY); glVertexPointer (3, GL_INT, 0, pt); glColorPointer (3, GL_INT, 0, hue);我们可以将颜色和顶点坐标一起装入一个交错数组(interlaced array )。每一个指针用适当的位移值指向单一的交错数组。例如:
static GLint hueAndPt [] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1}; glVertexPointer (3, GL_INT, 6 * sizeof(GLint), hueAndPt [3]); glColorPointer (3, GL_INT, 6 * sizeof(GLint), hueAndPt [0]);该数组的前三个元素指定一个RGB颜色值,接下来的三个元素指定一个顶点坐标(x, y, z),这样交错下去直到最后。将offset设定为相邻颜色或顶点值之间的字节数,即两者均为6 * sizeof(GLint)。颜色值从交错数组的第一个元素即hueAndPt[0]开始,顶点值从第四个元素即hueAndPt[3]开始。
glInterleavedArrays (GL_C3F_V3F,0,hueAndPt);第一个参数是一个OpenGL常量,用来指定颜色(C)和顶点(V)的三元素浮点描述。而数组hueAndPt按每个顶点的颜色放在其坐标前的方式交错。该函数也自动地激活顶点和颜色数组。在颜色索引模式下,使用下面的语句定义一个颜色索引数组:
glIndexPointer (type, stride, colorIndex);颜色索引在数组colorIndex中列出,而参数type和stride与g1CoIorPointer中的相同。由于颜色表索引用单个值描述,所以不需要size参数。
其他OpenGL颜色函数
这个用来为显示窗口选择RGB颜色分量的函数。g1ClearColor(red, green, blue, alpha);(red, green, blue)中的每一分量以及a参数均赋以0.0到1.0范围中的浮点数值。四个参数的默认值都是0.0,它们生成黑色。如果每一个颜色分量置为1.0,则该净颜色是白色。颜色分量为0.0到1.0之间的相等值时得到各种灰色。第四个参数α提供对前面颜色和当前颜色调和的选项。这仅仅在激活了OpenGL的调和特性后才会发生;颜色调和不可能作用于颜色表指定的值。
glClear(GL_COLOR_BUFFER_BIT);我们也可以用glClear函数设定OpenGL中有效的其他缓存的初始值。它们是存放调和颜色信息的累计缓存(accumulation buffer )、存放场景对象深度值(离观察位置的距离)的深度缓存(depth buffer)及存放定义图形范围的模板缓存(stencil buffer )。
glClearIndex(index);窗口背景色用存放在颜色表中index位置的颜色来指定。执行glClear (GL_COLOR_BUFFER_BIT)函
计算机图形学(三)_图元的属性_3_OpenGL颜色函数(下)
标签:
原文地址:http://blog.csdn.net/heyuchang666/article/details/51736288