不用AuxDIBImageLoad()向opengl中载入bmp纹理
来源:互联网 发布:简单图片轮播js代码 编辑:程序博客网 时间:2024/05/01 20:02
不用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 datafread(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// draw your stuff here// blah blah// blah blah// blah.....// blah// Last one, I promise...// blah.
我发现这个函数比调用AuxDIBImageLoad()或者win32 API要快,呵呵。如此之酷。
- 不用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图片,代码如下
- ASP.NET MVC 音乐商店 - 4. 数据访问
- 几个关于内存的性能计数器
- 手把手教你把Vim改装成一个IDE编程环境(图文)
- 资治通鉴,卷一百二十四,范晔之死
- tedious work done magnificently!
- 不用AuxDIBImageLoad()向opengl中载入bmp纹理
- 我看Chrome
- PHP设计模式之适配器模式,建造者模式,数据访问对象模式
- 多线程的那点事儿(之数据互斥)
- is not in the sudoers file的解决方法
- POJ 1006
- VirtualBox 共享配置(Linux)
- Job的提交—客户端
- 使用boot.ini启动YlmfOS,应该也能启动其他linux