?? texture.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 + -