gamma.c
上传用户:xk288cn
上传日期:2007-05-28
资源大小:4876k
文件大小:5k
源码类别:

GIS编程

开发平台:

Visual C++

  1. /* gamma.c */
  2. /* Draw test patterns to help determine correct gamma value for a display.
  3.    When the intensities in the top row nearly match the intensities in
  4.    the bottom row you've found the right gamma value.
  5.    For more info about gamma correction see:
  6.    http://www.inforamp.net/~poynton/notes/colour_and_gamma/GammaFAQ.html
  7.    This program is in the public domain
  8.    Brian Paul  19 Oct 1995 */
  9. /* Conversion to GLUT by Mark J. Kilgard */
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <stdlib.h>
  13. #include <GL/glut.h>
  14. static void 
  15. Reshape(int width, int height)
  16. {
  17.   glViewport(0, 0, (GLint) width, (GLint) height);
  18.   glMatrixMode(GL_PROJECTION);
  19.   glLoadIdentity();
  20.   glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
  21.   glMatrixMode(GL_MODELVIEW);
  22. }
  23. /* ARGSUSED1 */
  24. static void 
  25. key_esc(unsigned char key, int x, int y)
  26. {
  27.   if(key == 27) exit(0);  /* Exit on Escape */
  28. }
  29. static GLubyte p25[] =
  30. {
  31.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  32.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  33.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  34.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  35.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  36.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  37.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  38.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  39.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  40.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  41.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  42.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  43.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  44.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  45.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  46.   0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00,
  47. };
  48. static GLubyte p50[] =
  49. {
  50.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  51.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  52.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  53.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  54.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  55.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  56.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  57.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  58.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  59.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  60.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  61.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  62.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  63.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  64.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  65.   0xaa, 0xaa, 0xaa, 0xaa, 0x55, 0x55, 0x55, 0x55,
  66. };
  67. static GLubyte p75[] =
  68. {
  69.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  70.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  71.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  72.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  73.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  74.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  75.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  76.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  77.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  78.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  79.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  80.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  81.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  82.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  83.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  84.   0xaa, 0xaa, 0xaa, 0xaa, 0xff, 0xff, 0xff, 0xff,
  85. };
  86. static void 
  87. display(void)
  88. {
  89.   glClear(GL_COLOR_BUFFER_BIT);
  90. /** DITHERED ROW **/
  91.   /* solid black */
  92.   /* 25% white */
  93.   glEnable(GL_POLYGON_STIPPLE);
  94.   glColor3f(1.0, 1.0, 1.0);
  95.   glPolygonStipple(p25);
  96.   glRectf(-0.6, 1.0, -0.2, 0.01);
  97.   /* 50% white */
  98.   glPolygonStipple(p50);
  99.   glRectf(-0.2, 1.0, 0.2, 0.01);
  100.   /* 75% white */
  101.   glPolygonStipple(p75);
  102.   glRectf(0.2, 1.0, 0.6, 0.01);
  103.   /* 100% white */
  104.   glDisable(GL_POLYGON_STIPPLE);
  105.   glRectf(0.6, 1.0, 1.0, 0.01);
  106. /*** GRAY ROW ***/
  107.   /* solid black */
  108.   /* 25% white */
  109.   glColor3f(0.25, 0.25, 0.25);
  110.   glRectf(-0.6, -0.01, -0.2, -1.0);
  111.   /* 50% white */
  112.   glColor3f(0.5, 0.5, 0.5);
  113.   glRectf(-0.2, -0.01, 0.2, -1.0);
  114.   /* 75% white */
  115.   glColor3f(0.75, 0.75, 0.75);
  116.   glRectf(0.2, -0.01, 0.6, -1.0);
  117.   /* 100% white */
  118.   glColor3f(1.0, 1.0, 1.0);
  119.   glRectf(0.6, -0.01, 1.0, -1.0);
  120.   glFlush();
  121. }
  122. int 
  123. main(int argc, char **argv)
  124. {
  125.   glutInit(&argc, argv);
  126.   glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
  127.   glutInitWindowPosition(50, 50);
  128.   glutInitWindowSize(400, 200);
  129.   glutCreateWindow("gamma test patterns");
  130.   glutReshapeFunc(Reshape);
  131.   glutDisplayFunc(display);
  132.   glutKeyboardFunc(key_esc);
  133.   glutMainLoop();
  134.   return 0;             /* ANSI C requires main to return int. */
  135. }