1、 RGBA颜色
RGBA模式中,每一个像素会保存以下数据:红色分量、绿色分量、蓝色分量和alpha分量,其中红、绿、蓝三种颜色相组合,就得到看到的颜色,而alpha不直接影响颜色,它表示与底色的组合关系(即透明程度)。
glColor*系列函数可以用于设置颜色,其中三个参数的版本可以指定R、G、B的值,而A值采用默认;
四个参数的版本可以分别指定R、G、B、A的值。
例如:
void glColor3f(GLfloat red, GLfloat green, GLfloat blue);
void glColor4f(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha);
例如:
glColor3f(1.0f, 0.0f, 0.0f); 无绿、蓝色分量,只有红色分量,得到红色。
glColor3f(0.0f, 1.0f, 1.0f); 绿、蓝色分量,无红色分量。混合后是浅蓝色。
glColor3f(0.5f, 0.5f, 0.5f); 表示各种颜色分使用一半,效果为灰色。
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0f, 0.0f, 1.0f); // 只有蓝色分量
glRectf(-0.5f, -0.5f, 0.5f, 0.5f); // 画一个蓝正方形
glFlush();
glColorN?函数中:
f和d做后缀的函数,以1.0表示最大的使用。 例:glColor3f
b做后缀的函数,以127表示最大的使用。 例:glColor3b
ub做后缀的函数,以255表示最大的使用。 例:glColor3ub
s做后缀的函数,以32767表示最大的使用。 例:glColor3s
us做后缀的函数,以65535表示最大的使用。例:glColor3us
glColor3f()函数最常用。
2、指定清除屏幕用的颜色
glClear(GL_COLOR_BUFFER_BIT);
意思是把屏幕上的颜色清空(即红绿蓝三个分量全0)。
在RGB模式下,使用glClearColor来指定“空”的颜色,它需要四个参数,其参数的意义跟glColor4f相似。
glClearColor(1.0f, 0.0f, 0.0f, 0.0f); // 以红分量填充屏幕
glClear(GL_COLOR_BUFFER_BIT);
3、指定着色模型
可以为同一多边形的不同顶点指定不同的颜色,那么各点之间颜色,可以不同的方式处理。
在默认情况下,OpenGL会计算两点顶点之间的其它点,并为它们填上“合适”的颜色,使相邻的点的颜色值都比较接近。如果使用的是RGB模式,看起来就具有渐变的效果。
使用glShadeModel函数可以关闭这种计算,如果顶点的颜色不同,则将顶点之间的其它点全部设置为与某一个点相同。
glShadeModel(GL_SMOOTH); // 平滑方式,这也是默认方式
glShadeModel(GL_FLAT); // 单色方式
4、演示代码
void Step4_DrawDot_Line_Polygon(void)
{
const GLdouble Pi = 3.1415926536;
int i;
// glShadeModel(GL_FLAT);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_FAN);
glColor3f(1.0f, 1.0f, 1.0f);
glVertex2f(0.0f, 0.0f);
for(i=0; i<=8; ++i)
{
glColor3f(i&0x04, i&0x02, i&0x01);
glVertex2f(cos(i*Pi / 4), sin(i*Pi / 4));
}
glEnd();
glFlush();
}
5、运行结果演示:
glShadeModel(GL_SMOOTH);
glShadeModel(GL_FLAT); // 单色方式
6、项目文件下载
注意,在Debug-x86下编译