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

📄 texture.cpp

📁 用户可以使用键盘对飞机进行控制
💻 CPP
字号:
// Texture.cpp: implementation of the Texture class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MissileTest.h"
#include "Texture.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

extern	GLuint	texture[6];	

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Texture::Texture()
{

}

Texture::~Texture()
{

}
// 装入一个BMP位图
AUX_RGBImageRec *Texture::LoadBMP(const char *Filename)	
{
	FILE *File=NULL;	// 文件指针

	if (!Filename)		
	{
		return NULL;	// 如果文件指针不存在,则返回
	}

	File=fopen(Filename,"r");// 核实文件是否存在

	if (File)				 // 如果文件存在
	{
		fclose(File);		 // 关闭文件
		return auxDIBImageLoad(Filename);// 读入位图数据,并返回
	}

	return NULL;			// 如果读入失败,则返回NULL
}

// 装入BMP位图,并转换为纹理
GLuint Texture::LoadGLTexture( const char *filename )						
{
	AUX_RGBImageRec *pImage;	// 常见保存纹理的空间
	GLuint Texture = 0;			// 纹理的ID

	pImage = LoadBMP( filename );	// 读入指定文件的位图数据

	if ( pImage != NULL && pImage->data != NULL )	// 如果纹理图像存在
	{
		glGenTextures(1, &Texture);

		// 典型的纹理生成方法
		glBindTexture(GL_TEXTURE_2D, Texture);
		glTexImage2D(GL_TEXTURE_2D, 0, 3, pImage->sizeX, pImage->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, pImage->data);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);

		free(pImage->data);		// 释放纹理图像内存
		free(pImage);			// 释放图像结构
	}

	return Texture;				// 返回纹理
}

// 装入位图并将位图转换为纹理
int Texture::LoadTextures()								
{
	int Status=FALSE;			// 状态指示器

	AUX_RGBImageRec *TextureImage[1];		// 创建保存纹理的空间

	memset(TextureImage,0,sizeof(void *)*1);  

	if (TextureImage[0]=LoadBMP("Data/Cemento.bmp"))
	{
		Status=TRUE;						// 设置状态

		glGenTextures(1, &texture[0]);		// 创建第0号纹理

		// 生成 MipMapped 纹理
		glBindTexture(GL_TEXTURE_2D, texture[0]);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
		gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
	}
	if (TextureImage[0]=LoadBMP("Data/Floor.bmp"))
	{
		Status=TRUE;

		glGenTextures(1, &texture[1]);	  // 创建第1号纹理

		glBindTexture(GL_TEXTURE_2D, texture[1]);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
		gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
	}
	if (TextureImage[0]=LoadBMP("Data/FloorB.bmp"))
	{
		Status=TRUE;	

		glGenTextures(1, &texture[2]);   // 创建第2号纹理

		glBindTexture(GL_TEXTURE_2D, texture[2]);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
		gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
	}
	if (TextureImage[0]=LoadBMP("Data/Smoke.bmp"))
	{
		Status=TRUE;							

		glGenTextures(1, &texture[3]);	// 创建第3号纹理

		glBindTexture(GL_TEXTURE_2D, texture[3]);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
		gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
	}
	if (TextureImage[0]=LoadBMP("Data/CementoB.bmp"))
	{
		Status=TRUE;				

		glGenTextures(1, &texture[4]);		// 创建第4号纹理

		glBindTexture(GL_TEXTURE_2D, texture[4]);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
		glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
		gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
	}

	if (TextureImage[0])						// 如果纹理存在
	{
		if (TextureImage[0]->data)				// 如果纹理数据存在
		{
			free(TextureImage[0]->data);		// 释放纹理数据内存
		}

		free(TextureImage[0]);					// 释放图像结构
	}

	return Status;								// 返回状态
}

⌨️ 快捷键说明

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