opengl,OpenGL颜色

这回可能是OPENGL最简单的内容:颜色。 一 RGB模式 一般来讲实现彩色是用RGB三基色来调配的。这就是RGB模式,我们前面一直用这种方法 (例如: glColor3f(1.0,0.0,0.0); glVertex3f(0.0,0.0,0.0); 绘制一个红色点。) void glColor3{b s i f d ub us ui}(TYPE r,TYPE g, TYPE b); void glColor4{b s i f d ub us ui}(TYPE r,TYPE g, TYPE b,TYPE a); void glColor3{b s i f d ub us ui}v(TYPE *v); void glColor4{b s i f d ub us ui}v(TYPE *v); {}内是任选一种数值精度(看前面的介绍); 参数a是表征透明度的Alpha值。 后两个带v后缀的函数表明他们的参数是向量(详细使用看本篇的例子)。 以glColor3f为例,其参数取值范围-1.0--1.0,其它数值类型的函数将 自动把参数均匀影射到这个区间,例如: 后缀 类型 MIN MIN映射 MAX MAX映射 b 1byte整数 -128 -1.0 127 1.0 二 颜色索引模式 使用 void glIndex{s i f d}(TYPE c); void glIndex{s i f d}(TYPE *c); 来从颜色索引表中选取颜色。设置当前颜色索引值(调色板号),大于总数时取模。 前面所有例子都是RGB模式,所以这里给出一个颜色索引的例子: //sample.cpp #include <windows.h> #include <gl/gl.h> #include <gl/glu.h> #include <gl/glaux.h> #pragma comment(lib, "OpenGl32.lib") #pragma comment(lib, "glu32.lib") #pragma comment(lib, "glaux.lib") #pragma warning(disable : 4244) // MIPS #pragma warning(disable : 4136) // X86 #pragma warning(disable : 4051) // ALPHA //////////////////////////////////////////////////// //sample.cpp ////////////////////////////// #include <gl/gl.h> #include <gl/glu.h> #include <gl/glaux.h> #pragma comment(lib, "OpenGl32.lib") #pragma comment(lib, "glu32.lib") #pragma comment(lib, "glaux.lib") #pragma warning(disable : 4244) // MIPS #pragma warning(disable : 4136) // X86 #pragma warning(disable : 4051) // ALPHA void myinit(void); void InitPalette(void); void CALLBACK display(void); void CALLBACK reshape(GLsizei w,GLsizei h); void myinit(void) { auxInitDisplayMode(AUX_SINGLE|AUX_INDEX); auxInitPosition(0,0,500,500); auxInitWindow("sample1"); glClearColor(0.0,0.0,0.0,0.0); glClear(GL_COLOR_BUFFER_BIT); glShadeModel(GL_FLAT);//GL_FLAT填色模式 } void CALLBACK reshape(GLsizei w,GLsizei h) { if(w<=500&&h<=500) glViewport(0,0,w,h); if(w>500&&h<=500) glViewport(0,0,500,h); if(w<=500&&h>500) glViewport(0,0,w,500); if(w>500&&h>500) glViewport(0,0,500,500); glMatrixMode(GL_PROJECTION); glLoadIdentity(); if(w<=h) glOrtho(-20.0,20.0,-20.0*(GLfloat)h/(GLfloat)w, 20.0*(GLfloat)h/(GLfloat)w,-50.0,50.0); else glOrtho(-20.0*(GLfloat)h/(GLfloat)w, 20.0*(GLfloat)h/(GLfloat)w,-20.0,20.0,-50.0,50.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void draw(void) { GLint n; //首先给定三角扇的坐标信息 GLfloat pp[8][2]={{7.0,-7.0},{0.0,-10.0},{-7.0,-7.0},{-10.0,0.0}, {-7.0,7.0},{0.0,10.0},{7.0,7.0},{10.0,0.0}}; //先画前两个点,然后用循环读取前面的向量(数组)信息绘制 //完整图形 glBegin(GL_TRIANGLE_FAN); glVertex2f(0.0,0.0); glVertex2f(10.0,0.0); for(n=0;n<8;n++) { //每次从颜色查找表中找出新颜色,然后以这个颜色绘制三角扇 //注意glVertex2fv()中v后缀的使用,以前没有碰到过,v后缀代表 //参数是个向量(数组) glIndexi(n+1); glVertex2fv(pp[n]); } glEnd(); } void InitPalette(void) { //这是本例子的关键,初始化颜色查找表,这里一共定义 //乐8种颜色,是从蓝到青的渐进。 GLint i; static GLfloat rgb[][3]={{0.0,0.0,0.2},{0.0,0.0,0.4},{0.0,0.0,0.6}, {0.0,0.0,1.0},{0.0,0.2,1.0},{0.0,0.4,1.0},{0.0,0.8,1.0},{0.0,1.0,1.0}}; //调用简单的辅助库函数设置系统调色板,把刚才8个颜色定为全部 //颜色索引的内容 for(i=0;i<8;i++) auxSetOneColor(i+1,rgb[i][0],rgb[i][1],rgb[i][2]); } void CALLBACK display(void) { //首先调用自定义的InitPalette()初始化调色板 InitPalette(); glClearColor(0.0,0.0,0.0,1.0); glClear(GL_COLOR_BUFFER_BIT); glLoadIdentity(); draw(); glFlush(); } void main(void) { myinit(); auxReshapeFunc(reshape); auxMainLoop(display); }
// End sample
下次将介绍OPENGL的光照和材质效果,一个步入3D的阶梯,大家快来呀 ......
Tags:  opengl下载 opengl

延伸阅读

最新评论

发表评论