OpenGL入门学习之十一——纹理的使用入门.pdfVIP

OpenGL入门学习之十一——纹理的使用入门.pdf

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
OpenGL入门学习之十一——纹理的使用入门

OpenGL 入门学习之十一——纹理的使用入门 2009-01-07 12:09 1、启用纹理和载入纹理 就像我们曾经学习过的 OpenGL 光照、混合等功能一样。在使用纹理前,必须启用它。 OpenGL 支持一维纹理、二维纹理和三维纹理,这里我们仅介绍二维纹理。可以使用以下语 句来启用和禁用二维纹理: glEnable(GL_TEXTURE_2D); // 启用二维纹理 glDisable(GL_TEXTURE_2D); // 禁用二维纹理 使用纹理前,还必须载入纹理。利用 glTexImage2D 函数可以载入一个二维的纹理,该函数 有多达九个参数(虽然某些参数我们可以暂时不去了解),现在分别说明如下: 第一个参数为指定的目标,在我们的入门教材中,这个参数将始终使用 GL_TEXTURE_2D 。 第二个参数为“多重细节层次”,现在我们并不考虑多重纹理细节,因此这个参数设置为零。 第三个参数有两种用法。在 OpenGL 1.0,即最初的版本中,使用整数来表示颜色分量数目, 例如:像素数据用 RGB 颜色表示,总共有红、绿、蓝三个值,因此参数设置为 3,而如果像 素数据是用RGBA 颜色表示,总共有红、绿、蓝、alpha 四个值,因此参数设置为4 。而在 后来的版本中,可以直接使用 GL_RGB 或 GL_RGBA 来表示以上情况,显得更直观(并带 来其它一些好处,这里暂时不提)。注意:虽然我们使用 Windows 的BMP 文件作为纹理时, 一般是蓝色的像素在最前,其真实的格式为 GL_BGR 而不是 GL_RGB,在数据的顺序上有 所不同,但因为同样是红、绿、蓝三种颜色,因此这里仍然使用 GL_RGB 。(如果使用 GL_BGR ,OpenGL 将无法识别这个参数,造成错误) 第四、五个参数是二维纹理像素的宽度和高度。这里有一个很需要注意的地方:OpenGL 在 以前的很多版本中,限制纹理的大小必须是2 的整数次方,即纹理的宽度和高度只能是 16, 32, 64, 128, 256 等值,直到最近的新版本才取消了这个限制。而且,一些 OpenGL 实现(例 如,某些 PC 机上板载显卡的驱动程序附带的 OpenGL )并没有支持到如此高的OpenGL 版 本。因此在使用纹理时要特别注意其大小。尽量使用大小为 2 的整数次方的纹理,当这个要 求无法满足时,使用 gluScaleImage 函数把图象缩放至所指定的大小(在后面的例子中有用 到)。另外,无论旧版本还是新版本,都限制了纹理大小的最大值,例如,某 OpenGL 实现 可能要求纹理最大不能超过 1024*1024。可以使用如下的代码来获得OpenGL 所支持的最大 纹理: GLint max; glGetIntegerv(GL_MAX_TEXTURE_SIZE, max); 这 ma 的值就是当前OpenGL 实现中所支持的最大纹理。 在很长一段时间内,很多图形程序都喜欢使用 256*256 大小的纹理,不仅因为 256 是2 的整 数次方,也因为某些硬件可以使用 8 位的整数来表示纹理坐标,2 的8 次方正好是256 ,这 一巧妙的组合为处理纹理坐标时的硬件优化创造了一些不错的条件。 第六个参数是纹理边框的大小,我们没有使用纹理边框,因此这里设置为零。 最后三个参数与 glDrawPixels 函数的最后三个参数的使用方法相同,其含义可以参考 glReadPixels 的最后三个参数。大家可以复习一下第 10 课的相关内容,这里不再重复。 举个例子,如果有一幅大小为width*height ,格式为Windows 系统中使用最普遍的24 位 BGR ,保存在pixels 中的像素图象。则把这样一幅图象载入为纹理可使用以下代码: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_BGR_EXT, GL_UNSIGNED_BYTE, pixels); 注意,载入纹理的过程可能比较慢,原因是纹理数据通常比较大,例如一幅512*512 的BGR 格式的图象,大小为 0.75M 。把这些像素数据从主内存传送到专门的图形硬件,这个过程中 还可能需要把程序中所指定的像素格式转化为图形硬件所能识别的格式(或最能发挥图形硬 件 能的格式),这些操作都需要较多时间。 2 、纹理坐标 我们先来回忆一下之前学过的一点内容: 当我们绘制一个三角形时,只需要指定三个顶点的颜色。三角形中其它各点的颜色不需要我 们指定,这些点的颜色是OpenGL 自己通过计算得到的。 在我们学习 Op

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档