📄 opengl_texturecube.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 + -