ColorIndex.C
上传用户:tengyuc
上传日期:2007-08-14
资源大小:722k
文件大小:2k
- // 本程序演示颜色索引模式的使用方法
- #include <windows.h>
- #include <glgl.h>
- #include <glglaux.h>
- void CALLBACK ChangeSize(GLsizei w, GLsizei h)
- {
- // 避免被0除
- if(h == 0)
- h = 1;
- // 设置视口
- glViewport(0, 0, w, h);
- glLoadIdentity();
- if (w <= h)
- glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0);
- else
- glOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0);
- }
- void CALLBACK RenderScene(void)
- {
- int c;
- // 清除屏幕
- glClear(GL_COLOR_BUFFER_BIT);
- // 以不同颜色绘制多个矩形
- for(c = 0; c < 7; c++)
- {
- glIndexi(c+1);
- glRectf(c*35.0f,100.0f,c*35.0f+35.0f,150.0f);
- }
- glFlush();
- }
- // 该函数被idle函数连续调用
- void CALLBACK ShiftPalette(void)
- {
- static float palette[][3] = { { 0.0f, 0.0f, 0.0f },
- { 0.0f, 0.0f, 1.0f },
- { 0.0f, 1.0f, 0.0f },
- { 0.0f, 1.0f, 1.0f },
- { 1.0f, 0.0f, 0.0f },
- { 1.0f, 0.0f, 1.0f },
- { 1.0f, 1.0f, 0.0f },
- { 1.0f, 1.0f, 1.0f }};
- int i;
- float r,g,b;
- // 设置调色板
- for( i = 1; i < 9; i++)
- auxSetOneColor(i,palette[i-1][0],palette[i-1][1],palette[i-1][2]);
- // 下一次切换颜色
- r = palette[0][0];
- g = palette[0][1];
- b = palette[0][2];
- for(i = 0; i < 7; i++)
- {
- palette[i][0] = palette[i+1][0];
- palette[i][1] = palette[i+1][1];
- palette[i][2] = palette[i+1][2];
- }
- palette[7][0] = r;
- palette[7][1] = g;
- palette[7][2] = b;
- // 延时250 毫秒
- Sleep(250);
- }
- void main(void)
- {
- // 初始化显示模式
- auxInitDisplayMode(AUX_SINGLE | AUX_INDEX);
- auxInitPosition(100,100,250,250);
- auxInitWindow("Color Cycling");
- // 窗口大小改变时的回调函数
- auxReshapeFunc(ChangeSize);
- // 空闲响应函数
- auxIdleFunc(ShiftPalette);
- // 主循环函数
- auxMainLoop(RenderScene);
- }