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; 
}