OpenGL实战教程(5) -- 第四站:使用颜色

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下编译

在这里插入图片描述

下载第四站工程项目源文件

发布了30 篇原创文章 · 获赞 9 · 访问量 916

猜你喜欢

转载自blog.csdn.net/x879014419/article/details/105200135