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

GIS编程

开发平台:

Visual C++

  1. /*   * texture map demo scaffolding  *  * FUNCTION:  * Most of this code is required to set up OpenGL and GLUT  *  * HISTORY:  * Written by Linas Vepstas, March 1995  */ /* required include files */ #include <stdlib.h> #include <GL/glut.h> #include <GL/tube.h> #include "texture.h" /*  most recent mouse postion */ float lastx = 100.0; float lasty = 100.0; extern void InitStuff (void); extern void DrawStuff (void); /* get notified of mouse motions */ void MouseMotion (int x, int y) {    lastx = x;    lasty = y;    glutPostRedisplay (); } void TextureStyle (int msg)  {    int mode = 0;    switch (msg) {       case 301:          glDisable (GL_TEXTURE_2D);          break;       case 302:          glEnable (GL_TEXTURE_2D);          break;       case 501:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_FLAT;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();          glScalef (0.1, 0.1, 1.0); glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 502:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_FLAT;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();          glScalef (0.1, 0.1, 1.0); glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 503:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_CYL;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();          glScalef (1.0, 0.1, 1.0); glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 504:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_CYL;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();          glScalef (1.0, 0.1, 1.0); glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 505:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_SPH;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();           glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 506:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_SPH;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();           glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 507:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_MODEL_FLAT;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();          glScalef (0.1, 0.1, 1.0); glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 508:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_MODEL_FLAT;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();          glScalef (0.1, 0.1, 1.0); glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 509:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_MODEL_CYL;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();          glScalef (1.0, 0.1, 1.0); glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 510:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_MODEL_CYL;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();          glScalef (1.0, 0.1, 1.0); glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 511:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_MODEL_SPH;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();           glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 512:          mode = GLE_TEXTURE_ENABLE | GLE_TEXTURE_NORMAL_MODEL_SPH;          glMatrixMode (GL_TEXTURE); glLoadIdentity ();           glMatrixMode (GL_MODELVIEW);          gleTextureMode (mode);          break;       case 701:          current_texture = check_texture;          gluBuild2DMipmaps (GL_TEXTURE_2D, 3,                        current_texture -> size,                       current_texture -> size,                       GL_RGB, GL_UNSIGNED_BYTE,                        (void *) (current_texture->pixmap));          break;       case 702:          current_texture = barberpole_texture;          gluBuild2DMipmaps (GL_TEXTURE_2D, 3,                        current_texture -> size,                       current_texture -> size,                       GL_RGB, GL_UNSIGNED_BYTE,                        (void *) (current_texture->pixmap));          break;       case 703:          current_texture = wild_tooth_texture;          gluBuild2DMipmaps (GL_TEXTURE_2D, 3,                        current_texture -> size,                       current_texture -> size,                       GL_RGB, GL_UNSIGNED_BYTE,                        (void *) (current_texture->pixmap));          break;       case 704:          current_texture = planet_texture;          gluBuild2DMipmaps (GL_TEXTURE_2D, 3,                        current_texture -> size,                       current_texture -> size,                       GL_RGB, GL_UNSIGNED_BYTE,                        (void *) (current_texture->pixmap));          break;       case 99:          exit (0);       default:          break;    }    glutPostRedisplay(); } /* set up a light */ GLfloat lightOnePosition[] = {40.0, 40, 100.0, 0.0}; GLfloat lightOneColor[] = {0.99, 0.99, 0.99, 1.0};  GLfloat lightTwoPosition[] = {-40.0, 40, 100.0, 0.0}; GLfloat lightTwoColor[] = {0.99, 0.99, 0.99, 1.0};  int main (int argc, char * argv[]) {    /* initialize glut */    glutInit (&argc, argv);    glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);    glutCreateWindow ("texture");    glutDisplayFunc (DrawStuff);    glutMotionFunc (MouseMotion);    /* create popup menu */    glutCreateMenu (TextureStyle);    glutAddMenuEntry ("Texture Off", 301);    glutAddMenuEntry ("Texture On", 302);    glutAddMenuEntry ("--------------", 9999);    glutAddMenuEntry ("Vertex Flat", 501);    glutAddMenuEntry ("Normal Flat", 502);    glutAddMenuEntry ("Vertex Cylinder", 503);    glutAddMenuEntry ("Normal Cylinder", 504);    glutAddMenuEntry ("Vertex Sphere", 505);    glutAddMenuEntry ("Normal Sphere", 506);    glutAddMenuEntry ("--------------", 9999);    glutAddMenuEntry ("Model Vertex Flat", 507);    glutAddMenuEntry ("Model Normal Flat", 508);    glutAddMenuEntry ("Model Vertex Cylinder", 509);    glutAddMenuEntry ("Model Normal Cylinder", 510);    glutAddMenuEntry ("Model Vertex Sphere", 511);    glutAddMenuEntry ("Model Normal Sphere", 512);    glutAddMenuEntry ("--------------", 9999);    glutAddMenuEntry ("Check Texture", 701);    glutAddMenuEntry ("Barberpole Texture", 702);    glutAddMenuEntry ("Wild Tooth Texture", 703);    glutAddMenuEntry ("Molten Lava Texture", 704);    glutAddMenuEntry ("--------------", 9999);    glutAddMenuEntry ("Exit", 99);    glutAttachMenu (GLUT_MIDDLE_BUTTON);    /* initialize GL */    glClearDepth (1.0);    glEnable (GL_DEPTH_TEST);    glClearColor (0.0, 0.0, 0.0, 0.0);    glShadeModel (GL_SMOOTH);    glMatrixMode (GL_PROJECTION);    /* roughly, measured in centimeters */    glFrustum (-9.0, 9.0, -9.0, 9.0, 50.0, 150.0);    glMatrixMode(GL_MODELVIEW);    /* initialize lighting */    glLightfv (GL_LIGHT0, GL_POSITION, lightOnePosition);    glLightfv (GL_LIGHT0, GL_DIFFUSE, lightOneColor);    glEnable (GL_LIGHT0);    glLightfv (GL_LIGHT1, GL_POSITION, lightTwoPosition);    glLightfv (GL_LIGHT1, GL_DIFFUSE, lightTwoColor);    glEnable (GL_LIGHT1);    glEnable (GL_LIGHTING);    glColorMaterial (GL_FRONT_AND_BACK, GL_DIFFUSE);    glEnable (GL_COLOR_MATERIAL);    glColor3f (0.8, 0.3, 0.6);    /* initialize and enable texturing */
  2.    setup_textures ();    gluBuild2DMipmaps (GL_TEXTURE_2D, 3,                        current_texture -> size,                       current_texture -> size,                       GL_RGB, GL_UNSIGNED_BYTE,                        (void *) (current_texture->pixmap));    glMatrixMode (GL_TEXTURE);    glLoadIdentity ();    glScalef (1.0, 0.1, 1.0);    glMatrixMode (GL_MODELVIEW);    glEnable (GL_TEXTURE_2D);
  3. /*    some stuff to play with ....    glTexGeni (GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);    glTexGeni (GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);    glEnable (GL_TEXTURE_GEN_S);    glEnable (GL_TEXTURE_GEN_T); */    gleTextureMode (GLE_TEXTURE_ENABLE | GLE_TEXTURE_VERTEX_CYL);    InitStuff ();    glutMainLoop ();    return 0;             /* ANSI C requires main to return int. */ } /* -------------------- end of file -------------------- */