www.pudn.com > bmpfile.rar > main.cpp
#include#include #include #include #include #include"BMP.h" float xrot=0; float yrot=0; float zrot=0; AUX_RGBImageRec *TextureImage[1]; GLuint texture[1]; AUX_RGBImageRec *LoadBMP(char *Filename) // Loads A Bitmap Image { FILE *File=NULL; // File Handle if (!Filename) // Make Sure A Filename Was Given { return NULL; // If Not Return NULL } File=fopen(Filename,"r"); // Check To See If The File Exists if (File) // Does The File Exist? { fclose(File); // Close The Handle return auxDIBImageLoad(Filename); // Load The Bitmap And Return A Pointer } return NULL; // If Load Failed Return NULL } void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); GLfloat mat_specular[] = { 1.0, 0.0, 0.0, 1.0}; GLfloat mat_diffuse[]={1.0,0.8,0.8,1.0}; GLfloat mat_ambient[]={1.0,1.0,1.0,1.0}; GLfloat light_diffuse[]={1.0,1.0,1.0,1.0}; GLfloat mat_shininess[] = { 50.0 }; GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; GLfloat lmodel_ambient[]={1.0,1.0,1.0,1.0}; glShadeModel (GL_SMOOTH); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess); glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse); glMaterialfv(GL_FRONT,GL_AMBIENT,mat_ambient); glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_diffuse); glLightModelfv(GL_LIGHT_MODEL_AMBIENT,lmodel_ambient); glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER,GL_FALSE); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_TEXTURE_2D); glShadeModel(GL_SMOOTH); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); if (TextureImage[0]=LoadBMP("Data/NeHe.bmp")) { glGenTextures(1, &texture[0]); glBindTexture(GL_TEXTURE_2D, texture[0]); glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); } if (TextureImage[0]) { if (TextureImage[0]->data) { free(TextureImage[0]->data); } free(TextureImage[0]); } } void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0,0,5,0,0,0,0,1,0); glRotatef(xrot,1.0f,0.0f,0.0f); glRotatef(yrot,0.0f,1.0f,0.0f); glRotatef(zrot,0.0f,0.0f,1.0f); glBindTexture(GL_TEXTURE_2D, texture[0]); glBegin(GL_QUADS); // Front Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-5.0f, -5.0f, 5.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 5.0f, -5.0f, 5.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 5.0f, 5.0f, 5.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-5.0f, 5.0f, 5.0f); // Back Face glTexCoord2f(1.0f, 0.0f); glVertex3f(-5.0f, -5.0f, -5.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-5.0f, 5.0f, -5.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 5.0f, 5.0f, -5.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 5.0f, -5.0f, -5.0f); // Top Face glTexCoord2f(0.0f, 1.0f); glVertex3f(-5.0f, 5.0f, -5.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-5.0f, 5.0f, 5.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f( 5.0f, 5.0f, 5.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 5.0f, 5.0f, -5.0f); // Bottom Face glTexCoord2f(1.0f, 1.0f); glVertex3f(-5.0f, -5.0f, -5.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 5.0f, -5.0f, -5.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 5.0f, -5.0f, 5.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-5.0f, -5.0f, 5.0f); // Right face glTexCoord2f(1.0f, 0.0f); glVertex3f( 5.0f, -5.0f, -5.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f( 5.0f, 5.0f, -5.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 5.0f, 5.0f, 5.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 5.0f, -5.0f, 5.0f); // Left Face glTexCoord2f(0.0f, 0.0f); glVertex3f(-5.0f, -5.0f, -5.0f); glTexCoord2f(1.0f, 0.0f); glVertex3f(-5.0f, -5.0f, 5.0f); glTexCoord2f(1.0f, 1.0f); glVertex3f(-5.0f, 5.0f, 5.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-5.0f, 5.0f, -5.0f); glEnd(); glutSwapBuffers(); } void save(void) { myBmp Bmp("Data/1.bmp"); char *data; data=new char[(480*360)*3]; glReadPixels(0,0,480, 360,GL_RGB,GL_UNSIGNED_BYTE,data); Bmp.SetRGBData(data); Bmp.SetFileH(480*360); Bmp.SetInfoH(480, 360); Bmp.Wrtie("Data/1.bmp"); MessageBox(NULL,"±£´æ³É¹¦","±£´æ",0); } void spindisplay() { xrot+=0.1; yrot+=0.1; zrot+=0.1; glutPostRedisplay(); } void mouse(int button,int state,int x,int y) { switch(button) { case GLUT_LEFT_BUTTON: if(state==GLUT_DOWN) glutIdleFunc(spindisplay); break; case GLUT_MIDDLE_BUTTON: if(state==GLUT_DOWN) glutIdleFunc(NULL); break; default: break; } } void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glFrustum(-2.0,2.0,-2.0,2.0,1.5,20); } void keyboard(unsigned char key, int x, int y) { switch (key) { case 's': save(); break; } } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize (480, 360); glutInitWindowPosition (100, 100); glutCreateWindow ("Sample01"); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMouseFunc(mouse); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; }