一、颜色
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glPointSize(10);//设置点大小,要放在glBegin之前
glColor3f(0.0f, 1.0f, 0.0f);//设置颜色为绿色(RGB)
//只要后面不改变颜色,后面画图都是绿色
glBegin(GL_POINTS);//glBegin和glEnd之间画点/或线等
glVertex2f(0.3f, 0.3f);
glVertex2f(0.3f, -0.3f);
glEnd();
glColor3f(1.0f, 0.0f, 0.0f);//这里改颜色为红色
//不会修改前面两个点本来的绿色,只对后面的生效
//所以矩形框是红色的
glRectf(-0.2f, -0.2f, 0.2f, 0.2f);
glFlush();
}
上面是个小例子。
OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式。
1. RGBA颜色
RGBA模式中,每一个像素会保存以下数据:R值(红色分量)、G值(绿色分量)、B值(蓝色分量)和A值(alpha分量)。其中红、绿、蓝三种颜色相组合,就可以得到我们所需要的各种颜色,而alpha不直接影响颜色,它将留待以后介绍。
在RGBA模式下选择颜色是十分简单的事情,只需要一个函数就可以搞定。
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);
(3f表示有三个浮点参数,4f表示有三个浮点参数)
将浮点数作为参数,其中0.0表示不使用该种颜色,而1.0表示将该种颜色用到最多。例如:
glColor3f(1.0f, 0.0f, 0.0f); 表示不使用绿、蓝色,而将红色使用最多,于是得到最纯净的红色。
glColor3f(0.0f, 1.0f, 1.0f); 表示使用绿、蓝色到最多,而不使用红色。混合的效果就是浅蓝色。
glColor3f(0.5f, 0.5f, 0.5f); 表示各种颜色使用一半,效果为灰色。
注意:浮点数可以精确到小数点后若干位,这并不表示计算机就可以显示如此多种颜色。实际上,计算机可以显示的颜色种数将由硬件决定。如果OpenGL找不到精确的颜色,会进行类似“四舍五入”的处理。
注意:glColor系列函数,在参数类型不同时,表示“最大”颜色的值也不同。
采用f和d做后缀的函数,以1.0表示最大的使用。
采用b做后缀的函数,以127表示最大的使用。
采用ub做后缀的函数,以255表示最大的使用。
采用s做后缀的函数,以32767表示最大的使用。
采用us做后缀的函数,以65535表示最大的使用。
2. 索引颜色
先略过。