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);      // 单色方式

posted @ 2015-09-25 14:19  SeeKHit  阅读(1209)  评论(0编辑  收藏  举报