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

GIS编程

开发平台:

Visual C++

  1. /* paltex.c */
  2. /*
  3.  * Paletted texture demo.
  4.  */
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <math.h>
  8. #ifdef _WIN32
  9. #include <windows.h>
  10. #endif
  11. #include <GL/glut.h>
  12. #if defined(GL_EXT_paletted_texture) && defined(_WIN32)
  13. void (*glColorTableEXT)(GLenum target, GLenum internalFormat,
  14.   GLsizei width, GLenum format, GLenum type, const GLvoid * data);
  15. #endif
  16. static float Rot = 0.0;
  17. static void Idle( void )
  18. {
  19.    Rot += 5.0;
  20.    glutPostRedisplay();
  21. }
  22. static void Display( void )
  23. {
  24.    glClear( GL_COLOR_BUFFER_BIT );
  25.    glPushMatrix();
  26.    glRotatef(Rot, 0, 0, 1);
  27.    glBegin(GL_POLYGON);
  28.    glTexCoord2f(0, 1);  glVertex2f(-1, -1);
  29.    glTexCoord2f(1, 1);  glVertex2f( 1, -1);
  30.    glTexCoord2f(1, 0);  glVertex2f( 1,  1);
  31.    glTexCoord2f(0, 0);  glVertex2f(-1,  1);
  32.    glEnd();
  33.    glPopMatrix();
  34.    glutSwapBuffers();
  35. }
  36. static void Reshape( int width, int height )
  37. {
  38.    glViewport( 0, 0, width, height );
  39.    glMatrixMode( GL_PROJECTION );
  40.    glLoadIdentity();
  41.    glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 25.0 );
  42.    glMatrixMode( GL_MODELVIEW );
  43.    glLoadIdentity();
  44.    glTranslatef( 0.0, 0.0, -15.0 );
  45. }
  46. /* ARGSUSED1 */
  47. static void Key( unsigned char key, int x, int y )
  48. {
  49.    switch (key) {
  50.       case 27:
  51.          exit(0);
  52.          break;
  53.    }
  54.    glutPostRedisplay();
  55. }
  56. /* ARGSUSED1 */
  57. static void SpecialKey( int key, int x, int y )
  58. {
  59.    switch (key) {
  60.       case GLUT_KEY_UP:
  61.          break;
  62.       case GLUT_KEY_DOWN:
  63.          break;
  64.       case GLUT_KEY_LEFT:
  65.          break;
  66.       case GLUT_KEY_RIGHT:
  67.          break;
  68.    }
  69.    glutPostRedisplay();
  70. }
  71. static void Init( void )
  72. {
  73. #ifdef GL_EXT_paletted_texture
  74.    GLubyte texture[8][8] = {  /* PT = Paletted Texture! */
  75.       {  0,   0,   0,   0,   0,   0,   0,   0},
  76.       {  0, 100, 100, 100,   0, 180, 180, 180},
  77.       {  0, 100,   0, 100,   0,   0, 180,   0},
  78.       {  0, 100,   0, 100,   0,   0, 180,   0},
  79.       {  0, 100, 100, 100,   0,   0, 180,   0},
  80.       {  0, 100,   0,   0,   0,   0, 180,   0},
  81.       {  0, 100,   0,   0,   0,   0, 180,   0},
  82.       {  0, 100, 255,   0,   0,   0, 180, 250},
  83.    };
  84.    GLubyte table[256][4];
  85.    int i;
  86.    if (!glutExtensionSupported("GL_EXT_paletted_texture")) {
  87. #endif
  88.       printf("Sorry, GL_EXT_paletted_texture not supportedn");
  89.       exit(0);
  90. #ifdef GL_EXT_paletted_texture
  91.    }
  92.    /* put some wacky colors into the texture palette */
  93.    for (i=0;i<256;i++) {
  94.       table[i][0] = i;
  95.       table[i][1] = 0;
  96.       table[i][2] = 127 + i / 2;
  97.       table[i][3] = 255;
  98.    }
  99. #if defined(GL_EXT_paletted_texture) && defined(_WIN32)
  100.   glColorTableEXT = (void *) wglGetProcAddress("glColorTableEXT");
  101.   if (!glColorTableEXT) {
  102.     fprintf(stderr, "wglGetProcAddress could not get glColorTableEXTn");
  103.     exit(1);
  104.   }
  105. #endif
  106.    glColorTableEXT(GL_TEXTURE_2D,    /* target */
  107.                    GL_RGBA,          /* internal format */
  108.                    256,              /* table size */
  109.                    GL_RGBA,          /* table format */
  110.                    GL_UNSIGNED_BYTE, /* table type */
  111.                    table);           /* the color table */
  112.    glTexImage2D(GL_TEXTURE_2D,       /* target */
  113.                 0,                   /* level */
  114.                 GL_COLOR_INDEX8_EXT, /* internal format */
  115.                 8, 8,                /* width, height */
  116.                 0,                   /* border */
  117.                 GL_COLOR_INDEX,      /* texture format */
  118.                 GL_UNSIGNED_BYTE,    /* texture type */
  119.                 texture);            /* teh texture */
  120. #endif
  121.    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  122.    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  123.    glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
  124.    glEnable(GL_TEXTURE_2D);
  125. }
  126. int main( int argc, char *argv[] )
  127. {
  128.    glutInit( &argc, argv );
  129.    glutInitWindowPosition( 0, 0 );
  130.    glutInitWindowSize( 640, 480 );
  131.    glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE );
  132.    glutCreateWindow(argv[0]);
  133.    Init();
  134.    glutReshapeFunc( Reshape );
  135.    glutKeyboardFunc( Key );
  136.    glutSpecialFunc( SpecialKey );
  137.    glutDisplayFunc( Display );
  138.    glutIdleFunc( Idle );
  139.    glutMainLoop();
  140.    return 0;
  141. }