NeHeOpenGL第二十九课:Blt函数.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
NeHeOpenGL第二十九课:Blt函数

NeHe OpenGL第二十九课:Blt函数 2010-08-23 22:10:19 标签: HYPERLINK /tagindex.php?keyword=Blt \t _blank Blt  HYPERLINK /tagindex.php?keyword=OpenGL \t _blank OpenGL  HYPERLINK /tagindex.php?keyword=NeHe \t _blank NeHe  HYPERLINK /tagindex.php?keyword=%BA%AF%CA%FD \t _blank 函数 原创作品,允许转载,转载时请务必以超链接形式标明文章  HYPERLINK /1130898/381869 \t _blank 原始出处 、作者信息和本声明。否则将追究法律责任。 HYPERLINK /1130898/381869 /1130898/381869 NeHe OpenGL第二十九课:Blt函数 Blitter 函数: 类似于DirectDraw的blit函数,过时的技术,我们有实现了它。它非常的简单,就是把一块纹理贴到另一块纹理上。 这篇文章是有Andreas Lffler所写的,它写了一份原始的教程。过了几天,Rob Fletcher发了封邮件给我,他重新改写了所有的代码,我在它的基础上把glut的框架变换为Win32的框架。 现在让我们开始吧! 下面是一个保存图像数据的结构 typedef struct Texture_Image { int width; // 宽 int height; // 高 int format; // 像素格式 unsigned char *data; // 纹理数据 } TEXTURE_IMAGE; 接下来定义了两个指向这个结构的指针 typedef TEXTURE_IMAGE *P_TEXTURE_IMAGE; P_TEXTURE_IMAGE t1; // 指向保存图像结构的指针 P_TEXTURE_IMAGE t2; // 指向保存图像结构的指针 下面的函数为w*h的图像分配内存 P_TEXTURE_IMAGE AllocateTextureBuffer( GLint w, GLint h, GLint f) { P_TEXTURE_IMAGE ti=NULL; unsigned char *c=NULL; ti = (P_TEXTURE_IMAGE)malloc(sizeof(TEXTURE_IMAGE)); // 分配图像结构内存 if( ti != NULL ) { ti-width = w; // 设置宽度 ti-height = h; // 设置高度 ti-format = f; // 设置格式 // 分配w*h*f个字节 c = (unsigned char *)malloc( w * h * f); if ( c != NULL ) { ti-data = c; } else { MessageBox(NULL,内存不足,分配图像内存错误,MB_OK | MB_ICONINFORMATION); return NULL; } } else { MessageBox(NULL,内存不足,分配图像结构内存错??,MB_OK | MB_ICONINFORMATION); return NULL; } return ti; // 返回指向图像数据的指针 } 下面的函数释放分配的内存 // 释放图像内存 void DeallocateTexture( P_TEXTURE_IMAGE t ) { if(t) { if(t-data) { free(t-data); // 释放图像内存 } free(t); // 释放图像结构内存 } } 下面我们来读取*.raw的文件,这个函数有两个参数,一个为文件名,另一个为保存文件的图像结构指针。 // 读取*.RAW文件,并把图像文件上下翻转一符合OpenGL的使用格式。 int ReadTextureData ( char *filename, P_TEXTURE_IMAGE buffer) { FILE *f; int i,j,k,done=0; int stride = buffer-width * buffer-format; // 记录每一行的宽度,以字节为单位 unsigned char *p = NULL; f = fopen(filename, rb); // 打开文件 if( f != NULL ) // 如果文件存在 { 如果文件存在,我们通过一个循环读取我们的纹理,我们从图像的最下面一行,一行一行的读取图像。 for

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档