OpenGL 支持两种颜色模式:一种是RGBA,另一种是颜色索引模式
1.RGBA 颜色
R : 红色分量
G : 绿色分量
B : 蓝色分量
A : aphpa 透明度
glColor* 函数可以用于设置颜色
void glColor3f(GLfloat red,GLfloat green,GLfloat blue);
void glColor4f(GLfloat red,GLfloat green,GLfloat blue,GLfloat alpha);
void myDisplay(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0f,1.0f,1.0f);
glRectf(-0.5,-0.5,0.5,0.5);
glFlush();
}
glColor 系列函数,在参数类型不同时候,表述最大颜色值也不同
f、g 为后缀, 1.0 表示最大值
b 为后缀 127 为最大值
ub 后缀 255 为最大值
s 后缀 32767 表示最大值
us 后缀 65535 表示最大值
2. 索引颜色
选择颜色
glIndex* 系列函数可以在颜色表中选择颜色 常用glIndexi
void glIndexi(GLint c);
设置颜色表
OpenGL 没有提供设置颜色的办法,颜色设置需要操作系统的支持
这里使用OpenGL工具包 aux, vs 自带的
#include <windows.h>
#include <GL/gl.h>
#include <GL/glaux.h>
#include <math.h>
// 依赖的静态库
#pragma comment (lib, "opengl32.lib")
#pragma comment (lib, "glaux.lib")
const GLdouble Pi = 3.1415926536;
void myDisplay(void)
{
int i;
for(i=0; i<8; ++i)
{
auxSetOneColor(i, (float)(i&0x04), (float)(i&0x02), (float)(i&0x01));
}
glShadeModel(GL_FLAT);
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLE_FAN);
glVertex2f(0.0f, 0.0f);
for(i=0; i<=8; ++i)
{
glIndexi(i);
glVertex2f(cos(i*Pi/4), sin(i*Pi/4));
}
glEnd();
glFlush();
}
int main(int argc,char *argv[])
{
auxInitDisplayMode(AUX_SINGLE|AUX_INDEX);
auxInitPosition(0, 0, 400, 400);
auxInitWindow(L"");
myDisplay();
Sleep(10 * 1000);
return 0;
}
结果如图:
3. 清除颜色
glClear(GL_COLOR_BUFFER_BIT);意思是把屏幕上的颜色清空
4. 指定颜色模型
glShadeModel 的使用方法:
WINGDIAPI void APIENTRY glShadeModel(GLenum mode);
glShadeModel(GL_SMOOTH); // 平滑方式,这也是默认方式
glShadeModel(GL_FLAT); // 单色方式