您现在的位置: 天极网 > 在OpenGL中使用纹理压缩技术(二)

在OpenGL中使用纹理压缩技术(二)

2000-07-15 00:00作者:邱晓光 俞瑞泉出处:YESKY责任编辑:
3TC信息

  S3TC的压缩率由每个基本格式决定,23位纹理实际上被存储成32位纹理,因此GL_COMPRESSED_RGB_S3TC_DXT1_EXT也能达到8:1的压缩率。S3TC的压缩公式如下,其中8位块大小用于DXT1,16位用于DXT3和DXT5。
图像容量 = 块大小 * 格子(宽/4)* 格子(高/4)


  不同分辨率下,压缩和未压缩图像之间的差异由缩小倍数和放大倍数过滤器决定。

  图3左边的是128*128未压缩纹理,右边是S3TC RGB DXT1压缩纹理,缩小倍数和放大倍数过滤器设置为GL_NEAREST(邻近点采样)

  图4左边的是128*128未压缩纹理,右边是S3TC RGB DXT1压缩纹理,缩小倍数和放大倍数过滤器设置为GL_LINEAR(双线性过滤),根据过滤算法原理,双线性过滤比邻近点采样的图像要好。

  图5左边的是64*64未压缩纹理,右边是S3TC RGB DXT1压缩纹理,缩小倍数和放大倍数过滤器设置为GL_NEAREST(邻近点采样)

  图6左边的是64*64未压缩纹理,右边是S3TC RGB DXT1压缩纹理,缩小倍数和放大倍数过滤器设置为GL_LINEAR(双线性过滤),根据过滤算法原理,双线性过滤比邻近点采样的图像要好。

  我们还可以比较一下未压缩的64*64位纹理与压缩的128*128纹理的区别,压缩纹理明显比未压缩纹理优越.

  图7a是未压缩64*64纹理,b是RGB_DXT1 128*128压缩纹理,缩小倍数和放大倍数过滤器设置为GL_LINEAR(双线性过滤),它们占用相同的内存空间。

四、运行时间层

  运行时间层的主要任务是把压缩纹理解压,从硬盘中取得压缩纹理再直接下载到OpenGL已经成为了许多游戏的标准运行步骤,它有几个好处:

1、从快速媒体载入,减少了压缩纹理的占用的磁盘空间。
2、压缩纹理比未压缩纹理小,提高了主内存到纹理内存存储的效率。
3、纹理的尺寸减小,可以在视频内存中放入更多纹理,避免以性能损失极大的AGP方式来传送数据。
4、减少内存带宽消耗,把通道留给渲染像素,提高fps(frames r second,帧/秒),如:quake 3 32位色使用纹理压缩可增加20%的游戏速度。

  运行时间层的处理过程很简单,首先读入纹理文件,然后决定长、宽、高、边界、内部格式、缓冲容量和图像的可用性,并利用glCompressedTexImage2D附加$#@60;internalFormat$#@62;集的方法来决定内部格式类型,最后压缩纹理将直接发到纹理缓存,源代码:
glBindTexture(GL_TEXTURE_2D, already_compressed_decal_map);
glCompressedTexImage2D(GL_TEXTURE_2D, 0, internalFormat, width, height,
border, image_size, data);

  注意:由于压缩处理的过程很慢,运行时间层不会压缩动态纹理。

五、总结

  OpenGL使用纹理压缩可以极大提高程序性能,更好地还原图像的本来面目,已经成为显卡制造商未来发展的方向之一。希望通过上述讲解,能让各位对纹理压缩有更深一层的认识。
共1页。 1
相关文章及产品
关注此文读者还看过
相关
文章排行
本周
本月
最近更新
关于我们|网站律师|天极服务|投稿指南|电子杂志|RSS订阅|加入我们|网站地图
TMG
Copyright (C) 1999-2008 Chinabyte.com, All Rights Reserved 版权所有 天极网络
商务联系、网站内容、合作建议:010-82657868
版权声明 在线提交意见反馈 Powered by 天极内容管理平台CMS4i
经营性网站备案信息 网警备案 中国网站排名
天极传媒:天极网|比特网|IT专家网|IT商网|52PK游戏网|IT分众-网站地图