ColorIndex.C
上传用户:tengyuc
上传日期:2007-08-14
资源大小:722k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. //  本程序演示颜色索引模式的使用方法
  2. #include <windows.h>
  3. #include <glgl.h>
  4. #include <glglaux.h>
  5. void CALLBACK ChangeSize(GLsizei w, GLsizei h)
  6. {
  7. // 避免被0除
  8. if(h == 0)
  9. h = 1;
  10. // 设置视口
  11.     glViewport(0, 0, w, h);
  12. glLoadIdentity();
  13.     if (w <= h) 
  14. glOrtho (0.0f, 250.0f, 0.0f, 250.0f*h/w, 1.0, -1.0);
  15.     else 
  16. glOrtho (0.0f, 250.0f*w/h, 0.0f, 250.0f, 1.0, -1.0);
  17. }
  18. void CALLBACK RenderScene(void)
  19. {
  20. int c;
  21. // 清除屏幕
  22. glClear(GL_COLOR_BUFFER_BIT);
  23. // 以不同颜色绘制多个矩形
  24. for(c = 0; c < 7; c++)
  25. {
  26. glIndexi(c+1);
  27. glRectf(c*35.0f,100.0f,c*35.0f+35.0f,150.0f);
  28. }
  29. glFlush();
  30. }
  31. // 该函数被idle函数连续调用
  32. void CALLBACK ShiftPalette(void)
  33. {
  34. static float palette[][3] = { { 0.0f, 0.0f, 0.0f },
  35.    { 0.0f, 0.0f, 1.0f },
  36.    { 0.0f, 1.0f, 0.0f },
  37.    { 0.0f, 1.0f, 1.0f },
  38.    { 1.0f, 0.0f, 0.0f },
  39.    { 1.0f, 0.0f, 1.0f },
  40.    { 1.0f, 1.0f, 0.0f },
  41.    { 1.0f, 1.0f, 1.0f }};
  42. int i;
  43. float r,g,b;
  44. // 设置调色板
  45. for( i = 1; i < 9; i++)
  46. auxSetOneColor(i,palette[i-1][0],palette[i-1][1],palette[i-1][2]);
  47. // 下一次切换颜色
  48. r = palette[0][0];
  49. g = palette[0][1];
  50. b = palette[0][2];
  51. for(i = 0; i < 7; i++)
  52. {
  53. palette[i][0] = palette[i+1][0];
  54. palette[i][1] = palette[i+1][1];
  55. palette[i][2] = palette[i+1][2];
  56. }
  57. palette[7][0] = r;
  58. palette[7][1] = g;
  59. palette[7][2] = b;
  60. // 延时250 毫秒
  61. Sleep(250);
  62. }
  63. void main(void)
  64. {
  65. // 初始化显示模式
  66. auxInitDisplayMode(AUX_SINGLE | AUX_INDEX);
  67. auxInitPosition(100,100,250,250);
  68. auxInitWindow("Color Cycling");
  69. //  窗口大小改变时的回调函数
  70. auxReshapeFunc(ChangeSize);
  71. //  空闲响应函数
  72. auxIdleFunc(ShiftPalette);
  73. //  主循环函数
  74. auxMainLoop(RenderScene);
  75. }