不用AuxDIBImageLoad()向opengl中载入bmp纹理
来源:互联网 发布:淘宝店铺地址哪里看 编辑:程序博客网 时间:2024/05/22 17:00
转载:不用AuxDIBImageLoad()向opengl中载入bmp纹理
原文地址:http://www.cnblogs.com/gaoteng/archive/2011/12/03/2350368.html
不用AuxDIBImageLoad()向opengl中载入bmp纹理 这个函数从硬盘中加载24位window DIB 位图。呵呵,解释的多了。为了节约时间,我没有加载整个bmp图的Header部分,而仅仅获取我们需要的部分:宽度,高度,和图片大小。 下面是代码部分
unsigned int LoadTex(string Image){ unsigned int Texture; FILE* img = NULL; img = fopen(Image.c_str(),"rb"); unsigned long bWidth = 0; unsigned long bHeight = 0; DWORD size = 0; fseek(img,18,SEEK_SET); fread(&bWidth,4,1,img); fread(&bHeight,4,1,img); fseek(img,0,SEEK_END); size = ftell(img.file) - 54; unsigned char *data = (unsigned char*)malloc(size); fseek(img,54,SEEK_SET); // image data fread(data,size,1,img); fclose(img); glGenTextures(1, &Texture); glBindTexture(GL_TEXTURE_2D, Texture); gluBuild2DMipmaps(GL_TEXTURE_2D, 3, bWidth, bHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, data); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); if (data) free(data); return Texture;}
正如你可以看到,bitmap的宽度和高度偏移量为18和24,尺寸准确,我们只是从整个文件的大小减去54(总头大小),我们得到一个准确的读数。读文件头的大小,有时会出现故障。
用这个函数是相当容易的,就像是加载一个普通的纹理一样。
bool texLoaded = false;unsigned int texture;...if (!texLoaded){ texture = LoadTex("omfgleebhax.bmp"); // load the texture texLoaded = true;}glBindTexture(GL_TEXTURE_2D, texture); // bind the texture
我发现这个函数比调用AuxDIBImageLoad()或者win32 API要快,呵呵。如此之酷。
0 0
- 不用AuxDIBImageLoad()向opengl中载入bmp纹理
- 不用AuxDIBImageLoad()向opengl中载入bmp纹理
- OpenGL中不用AUX库来加载BMP图片作为纹理
- OpenGL中不用AUX库来加载BMP图片作为纹理[转载]
- opengl使用 devil载入纹理
- OpenGL载入DDS压缩纹理
- OpenGL载入图片作为纹理
- OpenGL加载BMP纹理图片
- opengl 加载bmp做纹理
- C#+OpenGL编程之OpenGL 纹理载入
- OpenGL入门学习[十一 03]bmp纹理
- OpenGL-纹理读取BMP图片-代码
- 类:CTexture,OpenGL中读取多种纹理的类。支持bmp,tga,rgb,rgba等
- opengl中添加纹理
- 载入纹理
- 在对话框中载入bmp图像
- VS2010 下 OpenGL auxDIBImageLoad函数出错
- OpenGL纹理贴图24位bmp图片,代码如下
- POJ 3164Command Network && UVA 11183 Teen Girl Squad 最小树形图
- 通过writeaudio方法将录音识别成文字(使用讯飞的SDK)
- java解惑--灰色的影子
- p122.14
- 学习笔记
- 不用AuxDIBImageLoad()向opengl中载入bmp纹理
- ClassLoader介绍及ClassLoader.loadClass和Class.forName()的比较
- nyoj 18 The Triangle 【经典dp】
- Majority Element
- 双系统(win8.1+ubuntu14.04)删除win下分区导致grub rescue解决方案
- 给N条边,请找三条边,使其组成一个三角形,并使得这个三角形的周长最大。
- 可微与连续
- 【C++】用函数模板实现不同类型的两个数比较大小
- substr截取字符串