openGL学习笔记2(颜色)

OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。

无论哪种颜色模式,计算机都必须为每一个像素保存一些数据。不同的是,RGBA模式中,数据直接就代表了颜色;而颜色索引模式中,数据代表的是一个索引,要得到真正的颜色,还必须去查索引表。

ex:

void myDisplay(void)
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(0.5f, 0.5f, 0.5f);
	glRectf(-0.5f, -0.5f, 0.5f, 0.5f);
	glFlush();
}

glColor3f里面的3个参数分别用来设置RGB三个分量的值,A采用默认值。上面的R=G=B=0.5f表示 各个分量的值相等,所以显示为灰色:



glClear(GL_COLOR_BUFFER_BIT);意思是把屏幕上的颜色清空。

glClearColor来指定“空”的颜色。比如,上述程序中,如果在glClear(GL_COLOR_BUFFER_BIT);

前面加上一句:

glClearColor(1.0f, 0.0f, 0.0f, 0.0f);

那么”空“就是红色了。那么,运行后,可以得到如下结果:




OpenGL允许为同一多边形的不同顶点指定不同的颜色。例如

#include <GL/glut.h>
#include <math.h>
const GLdouble Pi = 3.1415926536;
void myDisplay(void)
{
	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();
}

int main(int argc, char *argv[])
{
	glutInit(&argc, argv);//对GLUT进行初始化,这个函数必须在其它的GLUT使用之前调用一次
	glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); //设置显示方式
	glutInitWindowPosition(100, 100); //设置窗口位置
	glutInitWindowSize(400, 400);//窗口大小
	glutCreateWindow("我的OpenGL程序"); //根据前面设置的信息创建窗口。参数将被作为窗口的标题。
	glutDisplayFunc(&myDisplay); //当需要画图时,请调用myDisplay函数
	glutMainLoop(); //进行一个消息循环
	return 0;
}
结果如下:


在默认情况下,OpenGL会计算两点顶点之间的其它点,并为它们填上“合适”的颜色,使相邻的点的颜色值都比较接近。如果使用的是RGB模式,看起来就具有渐变的效果。如果是使用颜色索引模式,则其相邻点的索引值是接近的,如果将颜色表中接近的项设置成接近的颜色,则看起来也是渐变的效果。但如果颜色表中接近的项颜色却差距很大,则看起来可能是很奇怪的效果。
使用glShadeModel函数可以关闭这种计算,如果顶点的颜色不同,则将顶点之间的其它点全部设置为与某一个点相同。(直线以后指定的点的颜色为准,而多边形将以任意顶点的颜色为准,由实现决定。)为了避免这个不确定性,尽量在多边形中使用同一种颜色。

glShadeModel的使用方法:
glShadeModel(GL_SMOOTH);   // 平滑方式,这也是默认方式
glShadeModel(GL_FLAT);     // 单色方式

采用单色方式结果如下:



=======================================================================================================


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值