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

OpenGL

开发平台:

Visual C++

  1. #include <GL/glut.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. //  创建棋盘格子纹理图样
  5. #define checkImageWidth 64
  6. #define checkImageHeight 64
  7. static GLubyte checkImage[checkImageHeight][checkImageWidth][4];
  8. #ifdef GL_VERSION_1_1
  9. static GLuint texName;
  10. #endif
  11. void makeCheckImage(void)
  12. {
  13.    int i, j, c;
  14.     
  15.    for (i = 0; i < checkImageHeight; i++) {
  16.       for (j = 0; j < checkImageWidth; j++) {
  17.          c = ((((i&0x8)==0)^((j&0x8))==0))*255;
  18.          checkImage[i][j][0] = (GLubyte) c;
  19.          checkImage[i][j][1] = (GLubyte) c;
  20.          checkImage[i][j][2] = (GLubyte) c;
  21.          checkImage[i][j][3] = (GLubyte) 255;
  22.       }
  23.    }
  24. }
  25. void init(void)
  26. {    
  27.    glClearColor (0.0, 0.0, 0.0, 0.0);
  28.    glShadeModel(GL_FLAT);
  29.    glEnable(GL_DEPTH_TEST);
  30.    makeCheckImage();
  31.    glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
  32.    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  33.    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  34.    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  35.    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  36.    glTexImage2D(GL_TEXTURE_2D, 0, 4, checkImageWidth, checkImageHeight, 
  37.                 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);
  38. }
  39. void display(void)
  40. {
  41.    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  42.    glEnable(GL_TEXTURE_2D);
  43.    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
  44.    glBegin(GL_QUADS);
  45.    glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);
  46.    glTexCoord2f(0.0, 3.0); glVertex3f(-2.0, 1.0, 0.0);
  47.    glTexCoord2f(3.0, 3.0); glVertex3f(0.0, 1.0, 0.0);
  48.    glTexCoord2f(3.0, 0.0); glVertex3f(0.0, -1.0, 0.0);
  49.    glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0);
  50.    glTexCoord2f(0.0, 3.0); glVertex3f(1.0, 1.0, 0.0);
  51.    glTexCoord2f(3.0, 3.0); glVertex3f(2.41421, 1.0, -1.41421);
  52.    glTexCoord2f(3.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421);
  53.    glEnd();
  54.    glFlush();
  55.    glDisable(GL_TEXTURE_2D);
  56. }
  57. void reshape(int w, int h)
  58. {
  59.    glViewport(0, 0, (GLsizei) w, (GLsizei) h);
  60.    glMatrixMode(GL_PROJECTION);
  61.    glLoadIdentity();
  62.    gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0);
  63.    glMatrixMode(GL_MODELVIEW);
  64.    glLoadIdentity();
  65.    glTranslatef(0.0, 0.0, -3.6);
  66. }
  67. void keyboard (unsigned char key, int x, int y)
  68. {
  69.    switch (key) {
  70.       case 's':
  71.          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  72.          glutPostRedisplay();
  73.          break;
  74.       case 'S':
  75.          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  76.          glutPostRedisplay();
  77.          break;
  78.       case 't':
  79.          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
  80.          glutPostRedisplay();
  81.          break;
  82.       case 'T':
  83.          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  84.          glutPostRedisplay();
  85.          break;
  86.       case 27:
  87.          exit(0);
  88.          break;
  89.       default:
  90.          break;
  91.    }
  92. }
  93. int main(int argc, char** argv)
  94. {
  95.    glutInit(&argc, argv);
  96.    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
  97.    glutInitWindowSize(250, 250);
  98.    glutInitWindowPosition(100, 100);
  99.    glutCreateWindow(argv[0]);
  100.    init();
  101.    glutDisplayFunc(display);
  102.    glutReshapeFunc(reshape);
  103.    glutKeyboardFunc(keyboard);
  104.    glutMainLoop();
  105.    return 0; 
  106. }