OpenGL-入门-颜色

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);
将浮点数作为参数,其中 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 表示最大的使用。

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

在这里插入图片描述
2、索引颜色
  在索引颜色模式中,OpenGL 需要一个颜色表。这个表就相当于画家的调色板:虽然可以调出很多种颜色,但同时存在于调 色板上的颜色种数将不会超过调色板的格数。试将颜色表的每一项想象成调色板上的一个格子:它保存了一种颜色。 在使用索引颜色模式画图时,我说“我把第 i 种颜色设置为某某”,其实就相当于将调色板的第 i 格调为某某颜色。“我需要第 k 种颜色来画图”,那么就用画笔去蘸一下第 k 格调色板。 颜色表的大小是很有限的,一般在 256~4096 之间,且总是 2 的整数次幂。在使用索引颜色方式进行绘图时,总是先设置 颜色表,然后选择颜色。

2.1、选择颜色
  使用 glIndex*系列函数可以在颜色表中选择颜色。其中最常用的可能是 glIndexi,它的参数是一个整形。 void glIndexi(GLint c); 是的,这的确很简单。

2.2、设置颜色表(待补充)

3、指定清除屏幕用的颜色
  我们写:glClear(GL_COLOR_BUFFER_BIT);意思是把屏幕上的颜色清空。 但实际上什么才叫“空”呢?在宇宙中,黑色代表了“空”;在一张白纸上,白色代表了“空”;在信封上,信封的颜色才是“空”。
  OpenGL 用下面的函数来定义清楚屏幕后屏幕所拥有的颜色。 在 RGB 模式下,使用 glClearColor 来指定“空”的颜色,它需要四个参数,其参数的意义跟 glColor4f 相似。 在索引颜色模式下,使用 glClearIndex 来指定“空”的颜色所在的索引,它需要一个参数,其意义跟 glIndexi 相似。

void myDisplay(void) {     
   glClearColor(1.0f, 0.0f, 0.0f, 0.0f);    
    glClear(GL_COLOR_BUFFER_BIT);     
	glFlush(); 
} 

郑半仙
2019/3/2

猜你喜欢

转载自blog.csdn.net/weixin_42785489/article/details/88082554