OpenGL从图片文件加载Texture时的上下颠倒问题
2010-09-15 20:55
501 查看
在NeHe的教程6中,从BMP文件加载Texture时直接使用了auxDIBImageLoad(Filename);,而在JOGL和Android版本的代码中,你可以看到在使用了BufferedImage或者Bitmap类加载完图片文件后,都做了一个颠倒图片上下的操作。原因很简单,gluBuild2DMipmaps接收的图像数据是原始的BMP文件数据,在BMP文件中,是从图片的最后一行开始存储的,而BufferedImage或者Bitmap加载图片后的数据是从第一行开始存储的,所以需要颠倒一下。另外还要注意glTexImage2D需要指定数据中RGB三个分量的排列顺序。
以下是网上找到的一个Loading a BMP without AuxDIBImageLoad()例程,可以很明显看到BMP文件数据被直接送给了gluBuild2DMipmaps,验证了前面的推断。
以下是网上找到的一个Loading a BMP without AuxDIBImageLoad()例程,可以很明显看到BMP文件数据被直接送给了gluBuild2DMipmaps,验证了前面的推断。
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; } 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.
相关文章推荐
- iOS开发与OpenGL ES相关问题整理(2)- 绘制图片上下颠倒
- iOS开发与OpenGL ES相关问题整理(2)- 绘制图片上下颠倒
- cocos2dx 加载cocostudio创建的exportjson文件 不同图片之间会有黑线问题解决方法
- c++ + opencv + linux下加载文件(图片或级联分类器)路径的问题
- CCAtlasNode(CCAtlasNode封装了一个CCTextureAtlas的变量,CCTextureAtlas初始化图片文件的时候会把图片加载到缓存(CCTextureCache)中:)
- 解决三星GT-s5831i 加载TexturePacker打包的图片文件会花屏的bug
- iOS 加载本地HTML文件,图片没显示出来的问题
- android WebView 控件加载本地sdcard中html文件图片的问题
- c++ + opencv + linux下加载文件(图片或级联分类器)路径的问题
- 【C#/OpenGL】CSGL中2D纹理加载PNG等透明图片显示的黑边问题
- [MAC]OpenGL中SOIL库与stbi_load库加载图片,透明黑色问题,遇到的坑及解决办法
- android WebView 控件加载本地sdcard中html文件图片的问题
- cocos stuido的ccs文件加载成功 缺不显示图片的问题
- 加载Obj文件并用OpenGL渲染注意问题
- CTex中加载EPS图片的问题——pdflatex不能识别.eps文件格式
- java程序打包后文件图片不能加载的问题
- ios 加载本地HTML文件,图片不显示的问题
- 关于Android加载图片或文件设置有效期的问题
- java 在本地文件中加载图片的问题
- VS2017中WinForm工具箱加载dll文件时未找到组件的问题