⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 opengl_texturecube.cpp

📁 OPENGL做的纹理贴图立方体
💻 CPP
字号:
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <gl\glut.h> 
#include <STDLIB.H> 
#include <gl\GLAux.h>

GLuint texture[6];
GLfloat xrot = 15.0;
GLfloat yrot = 15.0;

AUX_RGBImageRec *LoadBMP(char *Filename)				
{
	FILE *File=NULL;								

	if (!Filename)										
	{
		return NULL;									
	}

	File=fopen(Filename,"r");							

	if (File)											
	{
		fclose(File);									
		return auxDIBImageLoad(Filename);				
	}

	return NULL;										
}
int LoadGLTextures()									
{
	int Status=FALSE;									

	AUX_RGBImageRec *TextureImage[6];					

	if ((TextureImage[0] = LoadBMP("Data/1.bmp"))&&(TextureImage[1] = LoadBMP("Data/2.bmp"))&&
		(TextureImage[2] = LoadBMP("Data/3.bmp"))&&(TextureImage[3] = LoadBMP("Data/4.bmp"))&&
		(TextureImage[4] = LoadBMP("Data/5.bmp"))&&(TextureImage[5] = LoadBMP("Data/6.bmp")))
	{
		Status=TRUE;									
		glGenTextures(6, &texture[0]);					
		for (int i=0; i<6; i++)
		{
			glBindTexture(GL_TEXTURE_2D, texture[i]);
			glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[i]->sizeX, TextureImage[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[i]->data);
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
			glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		}
	}

	for (int i=0; i<6; i++)
	{
		if (TextureImage[i])									
		{
			if (TextureImage[i]->data)							
			{
				free(TextureImage[i]->data);					
			}
			free(TextureImage[i]);								
		}
	}
	return Status;										
}

int myInit(GLvoid){                          
	
	if (!LoadGLTextures())
	{
		return FALSE;
	}
	glEnable(GL_TEXTURE_2D);
	glShadeModel(GL_SMOOTH);
	glClearColor(0.0f, 0.0f, 0.0f,0.0f);
	glClearDepth(1.0f);
	glEnable(GL_DEPTH_TEST);
	glDepthFunc(GL_LEQUAL);
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

	return TRUE;
}

void display(GLvoid)
{                     
	glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	glTranslatef(0.0f, 0.0f,-5.0f);

	glRotatef(xrot,1.0f,0.0f,0.0f);
	glRotatef(yrot,0.0f,1.0f,0.0f);

	//front
	glBindTexture(GL_TEXTURE_2D,texture[0]);
	glBegin(GL_QUADS);
	glTexCoord2f(0.0f, 0.0f); 
	glVertex3f(-4.0f, -4.0f,  4.0f);	// 纹理和四边形的左下
	glTexCoord2f(1.0f, 0.0f); 
	glVertex3f( 4.0f, -4.0f,  4.0f);	// 纹理和四边形的右下
	glTexCoord2f(1.0f, 1.0f); 
	glVertex3f( 4.0f,  4.0f,  4.0f);	// 纹理和四边形的右上
	glTexCoord2f(0.0f, 1.0f); 
	glVertex3f(-4.0f,  4.0f,  4.0f);	// 纹理和四边形的左上
	glEnd();
	//back
	glBindTexture(GL_TEXTURE_2D,texture[1]);
	glBegin(GL_QUADS);
	glTexCoord2f(1.0f, 0.0f);
	glVertex3f(-4.0f, -4.0f, -4.0f);	// 纹理和四边形的右下
	glTexCoord2f(1.0f, 1.0f); 
	glVertex3f(-4.0f,  4.0f, -4.0f);	// 纹理和四边形的右上
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f( 4.0f,  4.0f, -4.0f);	// 纹理和四边形的左上
	glTexCoord2f(0.0f, 0.0f); 
	glVertex3f( 4.0f, -4.0f, -4.0f);	// 纹理和四边形的左下
	glEnd();
	//top
	glBindTexture(GL_TEXTURE_2D,texture[2]);
	glBegin(GL_QUADS);
	glTexCoord2f(0.0f, 1.0f); 
	glVertex3f(-4.0f,  4.0f, -4.0f);	// 纹理和四边形的左上
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(-4.0f,  4.0f,  4.0f);	// 纹理和四边形的左下
	glTexCoord2f(1.0f, 0.0f); 
	glVertex3f( 4.0f,  4.0f,  4.0f);	// 纹理和四边形的右下
	glTexCoord2f(1.0f, 1.0f);
	glVertex3f( 4.0f,  4.0f, -4.0f);	// 纹理和四边形的右上
	glEnd();
	//bottom
	glBindTexture(GL_TEXTURE_2D,texture[3]);
	glBegin(GL_QUADS);
	glTexCoord2f(1.0f, 1.0f); 
	glVertex3f(-4.0f, -4.0f, -4.0f);	// 纹理和四边形的右上
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f( 4.0f, -4.0f, -4.0f);	// 纹理和四边形的左上
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f( 4.0f, -4.0f,  4.0f);	// 纹理和四边形的左下
	glTexCoord2f(1.0f, 0.0f);
	glVertex3f(-4.0f, -4.0f,  4.0f);	// 纹理和四边形的右下
	glEnd();
	//right
	glBindTexture(GL_TEXTURE_2D,texture[4]);
	glBegin(GL_QUADS);
	glTexCoord2f(1.0f, 0.0f);
	glVertex3f( 4.0f, -4.0f, -4.0f);	// 纹理和四边形的右下
	glTexCoord2f(1.0f, 1.0f);
	glVertex3f( 4.0f,  4.0f, -4.0f);	// 纹理和四边形的右上
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f( 4.0f,  4.0f,  4.0f);	// 纹理和四边形的左上
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f( 4.0f, -4.0f,  4.0f);	// 纹理和四边形的左下
	glEnd();
	//left
	glBindTexture(GL_TEXTURE_2D,texture[5]);
	glBegin(GL_QUADS);
	glTexCoord2f(0.0f, 0.0f);
	glVertex3f(-4.0f, -4.0f, -4.0f);	// 纹理和四边形的左下
	glTexCoord2f(1.0f, 0.0f);
	glVertex3f(-4.0f, -4.0f,  4.0f);	// 纹理和四边形的右下
	glTexCoord2f(1.0f, 1.0f);
	glVertex3f(-4.0f,  4.0f,  4.0f);	// 纹理和四边形的右上
	glTexCoord2f(0.0f, 1.0f);
	glVertex3f(-4.0f,  4.0f, -4.0f);	// 纹理和四边形的左上
	glEnd();


	glFlush();
}
void keyboard(unsigned char key, int x, int y)  
{  
	switch (key) {  
   case 'S':  
   case 's':  
	   xrot+=15.0f;								// X 轴旋转
	   glutPostRedisplay();  
	   break;  
   case 'W':  
   case 'w':  
	   xrot-=15.0f;								// X 轴旋转
	   glutPostRedisplay();  
	   break; 
   case 'A':  
   case 'a':  
	   yrot+=15.0f;								// Y 轴旋转
	   glutPostRedisplay();  
	   break;  
   case 'D':  
   case 'd': 
	   yrot-=15.0f;								// Y 轴旋转
	   glutPostRedisplay();  
	   break; 

   case 27:
	   exit(0);
	   break;  
	}  
}  

void myReshape(int w,int h)
{
	glViewport(0,0,(GLsizei)w,(GLsizei)h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();

	if(w <= h)
		glOrtho(-10,10,-10*(GLfloat)h/(GLfloat)w,10*(GLfloat)h/(GLfloat)w,-10,10); 
	else
		glOrtho(-10*(GLfloat)w/(GLfloat)h,10*(GLfloat)w/(GLfloat)h,-10,10,-10,10);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}

int main(int argc,char ** argv)
{
	glutInit(&argc,argv);
	glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB);
	glutInitWindowSize(600,600);
	glutInitWindowPosition(100,100);

	glutCreateWindow(" 立方体纹理贴图 06301011 康昊");

	myInit();
	glutReshapeFunc(myReshape);
	glutKeyboardFunc(keyboard); 
	glutDisplayFunc(display);

	glutMainLoop();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -