



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、OpenGL中用bmp图片做纹理贴图的三种方法方法一:首先获取位图句柄HBITMAP hBmp = (HBITMAP) :LoadImage (AfxGetResourceHandle(), MAKEINTRESOURCE(IDB_BITMAP1), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);然后根据位图句柄得到位图信息BITMAP BM; :GetObject (hBmp, sizeof (BM), &BM);最后根据位图信息中的RGB值建立纹理 gluBuild2DMipmaps( GL_TEXTURE_2D, 3, BM.bmWidth, BM.b
2、mHeight, GL_BGR_EXT, GL_UNSIGNED_BYTE, BM.bmBits );方法二:首先用OpenGL辅助库获得位图信息 AUX_RGBImageRec* TextureImage1; TextureImage0=auxDIBImageLoad(1.bmp);然后建立纹理 gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage0-sizeX, TextureImage0-sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage0-data);方法三:从底层做,需要了解bmp文件的结构,首先读取
3、bmp文件结构,包括文件头、信息头和数据,数据用于后面定义纹理long ImageWidth=256;long ImageHeight=256; GLubyte Image2562563;void ReadHeader(FILE *fp , BITMAPFH * p_bitmapheader , BITMAPIH *p_bitmapinfo) fseek(fp, 0, SEEK_SET) ; fread( &p_bitmapheader-bfType,sizeof(unsigned short), 1, fp ); fseek(fp, 2, SEEK_SET) ; fread( &p_bitm
4、apheader-bfSize,sizeof(unsigned long), 1, fp ); fseek(fp, 6, SEEK_SET) ; fread( &p_bitmapheader-bfReserved1,sizeof(unsigned short), 1, fp ); fseek(fp, 8, SEEK_SET) ; fread( &p_bitmapheader-bfReserved2,sizeof(unsigned short), 1, fp ); fseek(fp, 10, SEEK_SET) ; fread( &p_bitmapheader-bfOffBits,sizeof(
5、unsigned long), 1, fp ); fseek(fp, 14, SEEK_SET) ; fread( &p_bitmapinfo-biSize, sizeof(unsigned long), 1, fp ); fseek(fp, 18, SEEK_SET) ; fread( &p_bitmapinfo-biWidth, sizeof(unsigned long), 1, fp ); fseek(fp, 22, SEEK_SET) ; fread( &p_bitmapinfo-biHeight, sizeof(unsigned long), 1, fp ); fseek(fp, 2
6、6, SEEK_SET) ; fread( &p_bitmapinfo-biPlanes, sizeof(unsigned short), 1, fp ); fseek(fp, 28, SEEK_SET) ; fread( &p_bitmapinfo-biBitCount, sizeof(unsigned short), 1, fp ); fseek(fp, 30, SEEK_SET) ; fread( &p_bitmapinfo-biCompression, sizeof(unsigned long), 1, fp ); fseek(fp, 34, SEEK_SET) ; fread( &p
7、_bitmapinfo-biSizeImage, sizeof(unsigned long), 1, fp ); fseek(fp, 38, SEEK_SET) ; fread( &p_bitmapinfo-biXPelsPerMeter, sizeof(unsigned long), 1, fp ); fseek(fp, 42, SEEK_SET) ; fread( &p_bitmapinfo-biYPelsPerMeter, sizeof(unsigned long), 1, fp ); fseek(fp, 46, SEEK_SET) ; fread( &p_bitmapinfo-biCl
8、rUsed, sizeof(unsigned long), 1, fp ); fseek(fp, 50, SEEK_SET) ; fread( &p_bitmapinfo-biClrImportant, sizeof(unsigned long), 1, fp ); void ReadBitmapFile() BITMAPFH bitmapheader ; BITMAPIH bitmapinfo ; FILE *fp; fp = fopen(6.bmp , r) ; if(!fp) puts(Read file failed.) ; return; ReadHeader(fp, &bitmap
9、header , &bitmapinfo) ; if(bitmapinfo.biBitCount != 24) puts(UNSUPPORT) ; return; ImageWidth = bitmapinfo.biWidth; ImageHeight = bitmapinfo.biHeight; int i=bitmapheader.bfOffBits; while(ibitmapheader.bfSize) for(int j=0;jImageWidth;j+) for(int k=0;kImageHeight;k+) fseek(fp, i, SEEK_SET) ; fread(Imag
10、ejk+2, 1, 1, fp) ; fseek(fp, i+1, SEEK_SET) ; fread(Imagejk+1, 1, 1, fp) ; fseek(fp, i+2, SEEK_SET) ; fread(Imagejk, 1, 1, fp) ; i=i+3; fclose(fp) ;glTexImage2D(GL_TEXTURE_2D, 0, 3, ImageWidth,ImageHeight, 0, GL_RGB, GL_UNSIGNED_BYTE,&Image000);OpenGL中不用AUX库来加载BMP图片作为纹理转载(2007-02-11 21:22:15)大家在Open
11、GL中一般是用aux库的auxDIBImageLoad()函数来加载BMP格式的图片来作为纹理,这个确实是比较简单易用,但aux库的性能不佳,经常会出问题,稳定性较差。所以一般最好不要用aux库,可以用glut库,但glut库没有纹理加载函数。而有些程序是直接读取BMP格式来获得图像数据,从而生成纹理的,这种方法虽然很强大,但比较复杂,需要了解BMP的格式,对初学者比较困难。而下面的一段程序是用windows的API函数LoadImage()来实现这个功能,这种实现方法很简单,可以说比auxDIBImageLoad()函数复杂不了多少。 首先,加上头文件: #include 这是因为后面的GL
12、_BGR_EXT是定义在这个头文件里的,因为BMP格式是按Blue,Green,Red顺序储存图像数据的,这与OpenGL中正好相反。GL_BGR_EXT就是完成两者之间的转换的。 下面就是不用AUX库来加载BMP图片作为纹理的函数:bool LoadTexture(LPTSTR szFileName, GLuint &texid)/ Creates Texture From A Bitmap FileHBITMAP hBMP;/ Handle Of The BitmapBITMAPBMP;/ Bitmap StructureglGenTextures(1, &texid);/ Create
13、The TexturehBMP=(HBITMAP)LoadImage(GetModuleHandle(NULL), szFileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADFROMFILE );if (!hBMP)/ Does The Bitmap Exist?return FALSE;/ If Not Return FalseGetObject(hBMP, sizeof(BMP), &BMP);/ Get The Object/ hBMP: Handle To Graphics Object/ sizeof(BMP): Siz
14、e Of Buffer For Object Information/ &BMP: Buffer For Object InformationglPixelStorei(GL_UNPACK_ALIGNMENT, 4);/ Pixel Storage Mode (Word Alignment / 4 Bytes)/ Typical Texture Generation Using Data From The BitmapglBindTexture(GL_TEXTURE_2D, texid);/ Bind To The Texture IDglTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);/ Linear Min FilterglTexParameteri(GL_TEXTURE_2D, GL_TEXTU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年记者证考试的评估体系介绍试题及答案
- 2024年秘书证考试主观题解析试题及答案
- 海鲜安全管理与试题及答案
- 二级建造师考试合同法律基础试题及答案
- 档案保护知识测试题及答案
- 心内科门诊日常管理
- 收纳师考试备考试题及答案指南
- 二级建造师考试题型试题及答案
- 力矩平衡实验设计试题及答案
- 光彩夺目的珠宝鉴定师考试试题答案
- 第四单元第十课第二框题 保护人身权 同步练习(无答案)2024-2025学年七年级下册道德与法治
- 2025年中国铁路青藏集团限公司公开招聘635人笔试自考难、易点模拟试卷(共500题附带答案详解)
- 浙江2025年桐乡市事业单位招考高频重点模拟试卷提升(共500题附带答案详解)
- 药械不良事件知识培训
- 2025至2031年中国管道直饮水系统行业投资前景及策略咨询研究报告
- 现场材料进场验收培训
- 外卖骑手交通安全培训
- 【指导规则】央企控股上市公司ESG专项报告参考指标体系
- 电力公司安全生产责任制度
- 工程机械租赁服务方案及保障措施 (二)
- 《矩阵式组织结构》课件
评论
0/150
提交评论