OpenGL图元的颜色属性
OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。
1. RGBA颜色
RGBA模式中,每一个像素会保存以下数据:R值(红色分量)、G值(绿色分量)、B值(蓝色分量)和A值(alpha分量)。其中红、绿、蓝三种颜色相组合,就可以得到我们所需要的各种颜色,而alpha不直接影响颜色,它将留待以后介绍。
在RGBA模式下选择颜色是十分简单的事情,只需要一个函数就可以搞定。
glColor*系列函数可以用于设置颜色,其中三个参数的版本可以指定R、G、B的值,而A值采用默认;四个参数的版本可以分别指定R、G、B、A的值。
2、指定着色模型
OpenGL允许对同一个多边形的不同顶点设定不同的颜色,用上篇的五角星为例,依次设置顶点为红,绿,蓝,白。
1 void Star(void) 2 { 3 4 GLfloat r = 0.8f; 5 GLfloat PointA[2] = { 0, r }; 6 GLfloat PointB[2] = { -r*sin(0.4*Pi), r*cos(0.4*Pi) }; 7 GLfloat PointC[2] = { -r*sin(Pi / 5), -r*cos(Pi / 5) }; 8 GLfloat PointD[2] = { r*sin(Pi / 5), -r*cos(Pi / 5) }; 9 GLfloat PointE[2] = { r*sin(0.4*Pi), r*cos(0.4*Pi) }; 10 11 glLineWidth(8.0f);//线宽,需在glBegin前设置 12 // glEnable(GL_LINE_STIPPLE);//启用虚线 13 // glLineStipple(1,1); 14 15 glClear(GL_COLOR_BUFFER_BIT); 16 17 glBegin(GL_LINE_LOOP); 18 glVertex2fv(PointA); 19 glColor3f(1.0f, 0, 0); 20 glVertex2fv(PointC); 21 glColor3f(0, 1.0f, 0); 22 glVertex2fv(PointE); 23 glColor3f(0, 0, 1.0f); 24 glVertex2fv(PointB); 25 glColor3f(1.0,1.0,1.0); 26 glVertex2fv(PointD); 27 28 glEnd(); 29 30 glFinish(); 31 }
效果如下:
补充:
在默认RGBA模式下,2个颜色不同点之间的其余点,OpenGL会计算后填上颜色相近的点,使之有颜色渐变的效果。使用glShadeModel()函数可以关闭这种计算。
glShadeModel的使用方法:
glShadeModel(GL_SMOOTH); // 平滑方式,这也是默认方式
glShadeModel(GL_FLAT); // 单色方式