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

GIS编程

开发平台:

Visual C++

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