-
OpenGL中的BMP图像载入 2007-02-23
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://whatagoodboy.blogbus.com/logs/4590963.html
BMP图像的载入可以用于纹理贴图,这里介绍这种方法。这里用到的主要是auxDIBImageLoad函数,来自glaux.h库。所以在程序中一定要加上#include <GL\glaux.h>在工程中也要加载相关的.lib文件。代码加了注释,应该可以看懂。

#include <GL\glaux.h>
#include <string>
#include <fstream>
using namespace std;GLuint texture; // 用来绑定纹理
/*
* 载入图像函数
* 返回图像的指针,发生错误返回NULL
* AUX_RGBImageRec是glaux库里定义的类型
* 函数正常情况下返回一个指向图像文件的指针
*/
AUX_RGBImageRec *LoadBMP(string filename)
{
fstream file; // 文件流,用于图像文件操作
if(filename=="") // 防止文件名为空
{
return NULL;
}
file.open(filename.c_str(), ios::in); // 以只读方式打开文件
if (file) // 若打开成功
file.close(); // 关闭文件流
// 返回图像文件的指针
return auxDIBImageLoad(filename.c_str());
return NULL; // 如果前面操作失败返回NULL
}/*
* 载入BMP贴图函数
* 一切正常返回true
*/
int LoadTexture()
{
// 产生和绑定纹理
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
// 载入纹理
AUX_RGBImageRec *TexImage;
TexImage = LoadBMP("example.bmp"); // 通过LoadBMP函数载入图像
if(NULL==TexImage) return false; // 如果失败,返回false
glTexImage2D(GL_TEXTURE_2D, 0, 3, TexImage->sizeX, TexImage->sizeY,
0, GL_RGB, GL_UNSIGNED_BYTE, TexImage->data);
// 设置纹理
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// 释放图像资源
if(TexImage)
{
if(TexImage->data)
{
free(TexImage->data);
}
free(TexImage);
}
return true;
}随机文章:
Trigger游戏修改 2009-10-18又一本3D的书 2009-06-10在NDSI上写程序 2009-01-27寒假想看的书 2007-01-09简单光栅图形软件包简介三 2006-09-02
收藏到:Del.icio.us








评论
http://gpwiki.org/index.php/LoadTGACpp
而且,glaux.h和glut.h的容易有很多冲突,如果要在这个程序里用glut.h里的函数怎么办?
http://nehe.gamedev.net/
have a check :)
为什么BMP图像程序用不了?
貌似没用透视?看上去很奇怪的样子。