OpenG: 简单的纹理贴图

#define GLUT_DISABLE_ATEXIT_HACK #include <GL/glut.h> #pragma comment(lib, "glut32.lib")

#define    WIDTH 64 #define    HEIGHT 64 GLubyte Image[HEIGHT][WIDTH][4]; GLfloat xRot; GLuint texture;

void makeImage(void) {  int i, j, c;

 for (i = 0; i < HEIGHT; i++)  {   for (j = 0; j < WIDTH; j++)   {    c = ((((i & 0x8) == 0) ^ ((j & 0x8)) == 0)) * 255;    Image[i][j][0] = (GLubyte) c;    Image[i][j][1] = (GLubyte) c;    Image[i][j][2] = (GLubyte) c;    Image[i][j][3] = (GLubyte) 255;   }  } }

void init(void) {  glClearColor (0.0, 0.0, 0.0, 0.0);

 makeImage();  glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

 //glGenTextures(1, &texture);  //if (0 != texture)  //{  // glBindTexture(GL_TEXTURE_2D, texture);  //}  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); //设置纹理参数  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);  glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, WIDTH, HEIGHT, 0, GL_RGBA, GL_UNSIGNED_BYTE, Image);

 glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); //设置纹理环境  glEnable(GL_TEXTURE_2D);         //启用二维纹理

}

void display(void) {  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  glEnable(GL_TEXTURE_2D);  glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

 //if (0 != texture)  //{  // glBindTexture(GL_TEXTURE_2D, texture);  //}  glPushMatrix();  {   glColor4f(0.0, 1.0, 0.0, 1.0);   glTranslatef(0.0, 0.0,-6.0);   glRotatef(xRot,1,0,0);   glBegin(GL_QUADS);          //指定纹理坐标   {    glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -2.0, 0.0);    glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 2.0, 0.0);    glTexCoord2f(1.0, 1.0); glVertex3f(2.0, 2.0, 0.0);    glTexCoord2f(1.0, 0.0); glVertex3f(2.0, -2.0, 0.0);   }   glEnd();  }  glPopMatrix();

 glFlush(); }

void reshape(int w, int h) {  glViewport(0, 0, (GLsizei) w, (GLsizei) h);  glMatrixMode(GL_PROJECTION);  glLoadIdentity();  gluPerspective(60.0, (GLfloat) w/(GLfloat) h, 1.0, 30.0);  glMatrixMode(GL_MODELVIEW);  glLoadIdentity(); }

void OnTimer(int value) {  xRot++;            //旋转角度增量  glutPostRedisplay();  glutTimerFunc(10, OnTimer, 1); }

void main(int argc, char** argv) {  glutInit(&argc, argv);  glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);  glutInitWindowSize(250, 250);  glutInitWindowPosition(100, 100);  glutCreateWindow(argv[0]);  init();  glutDisplayFunc(display);  glutReshapeFunc(reshape);  glutTimerFunc(10,OnTimer,1);  glutMainLoop(); }


 

 

展开阅读全文

没有更多推荐了,返回首页