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

OpenGL

开发平台:

Visual C++

  1. #include "windows.h"
  2. #include <GL/gl.h>
  3. #include <GL/glu.h>
  4. #include <GL/glaux.h>
  5. void myinit(void);
  6. void makeImage(void);
  7. void CALLBACK myReshape(GLsizei w, GLsizei h);
  8. void CALLBACK display(void);
  9. #define ImageWidth 64
  10. #define ImageHeight 64
  11. GLubyte Image[ImageWidth][ImageHeight][3];
  12. void makeImage(void)
  13. {
  14.     int i, j, r,g,b;
  15.     
  16.     for (i = 0; i < ImageWidth; i++) 
  17. {
  18. for (j = 0; j < ImageHeight; j++) 
  19. {
  20. r=(i*j)%255;
  21. g=(4*i)%255;
  22. b=(4*j)%255;
  23. Image[i][j][0] = (GLubyte) r;
  24. Image[i][j][1] = (GLubyte) g;
  25. Image[i][j][2] = (GLubyte) b;
  26. }
  27.     }
  28. }
  29. void myinit(void)
  30. {    
  31.     glClearColor (0.0, 0.0, 0.0, 0.0);
  32.     glEnable(GL_DEPTH_TEST);
  33.     glDepthFunc(GL_LESS);
  34. //  生成纹理数据
  35.     makeImage();
  36. //  设置像素存储模式
  37.     glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
  38. //  定义二维纹理映射
  39.     glTexImage2D(GL_TEXTURE_2D, 0, 3, ImageWidth, 
  40. ImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, &Image[0][0][0]);
  41. //  定义纹理映射参数
  42.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
  43.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
  44.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
  45.     glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
  46. //  数值纹理环境参数
  47.     glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
  48. //  使用二维纹理
  49.     glEnable(GL_TEXTURE_2D);
  50.     glShadeModel(GL_FLAT);
  51. }
  52. void CALLBACK display(void)
  53. {
  54.     glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  55.     glBegin(GL_QUADS);
  56.     glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);
  57.     glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0);
  58.     glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0);
  59.     glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0);
  60.     glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0);
  61.     glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0);
  62.     glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421);
  63.     glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421);
  64.     glEnd();
  65.     glFlush();
  66. }
  67. void CALLBACK myReshape(GLsizei w, GLsizei h)
  68. {
  69.     glViewport(0, 0, w, h);
  70.     glMatrixMode(GL_PROJECTION);
  71.     glLoadIdentity();
  72.     gluPerspective(60.0, 1.0*(GLfloat)w/(GLfloat)h, 1.0, 30.0);
  73.     glMatrixMode(GL_MODELVIEW);
  74.     glLoadIdentity();
  75.     glTranslatef(0.0, 0.0, -3.6);
  76. }
  77. void main(void)
  78. {
  79.     auxInitDisplayMode (AUX_SINGLE | AUX_RGBA | AUX_DEPTH);
  80.     auxInitPosition (0, 0, 500, 500);
  81.     auxInitWindow ("简单纹理映射演示");
  82.     myinit();
  83.     auxReshapeFunc (myReshape);
  84.     auxMainLoop(display);
  85. }