展鸿丶 展鸿丶
沙雕程序员。
关注数: 8 粉丝数: 1,091 发帖数: 6,290 关注贴吧数: 12
[苟...]加载DDS文件(压缩纹理) 想必很多人都见过DDS这种文件,它是一个“图片文件”,如果你安装了某些看图软件,你可以直接双击打开它来进行预览。 那么,这种DDS文件和我们常见的TGA/PNG之类的文件有何不同呢? DDS和TGA/PNG/JPG之类的“图片文件” 一样,支持“压缩”,减少磁盘空间占用(把文件变小)。 通常我们要加载一个TGA或者PNG文件到OpenGL的时候,都要先把文件数据还原成RGB格式的像素数据,然后用glTexImage2D把像素数据传到显存。这个过程相当于“解压”,这通常非常消耗CPU资源,速度较慢。 但是DDS的压缩数据不需要“解压”就能直接传到显存,而且传到显存之后也不会解压,这极大减少了显存的使用量,并且提高了纹理加载速度,有绝对的优势。我们只需要读取好压缩数据,然后使用glCompressedTexImage2D(代替glTexImage2D)就可以直接把压缩数据传到显存,完成加载。 DDS可以保存许多种格式的像素数据,这里只讲最常用的3种(DXT1、DXT3、DXT5)。 * 当然DDS文件也能存储不压缩的像素数据。 为了在OpenGL中使用DDS压缩纹理(下文简称压缩纹理),我们需要一下2个OpenGL扩展: GL_ARB_texture_compression 提供函数 “glCompressedTexImage2D” GL_EXT_texture_compression_s3tc 提供以下格式的压缩纹理支持: GL_COMPRESSED_RGB_S3TC_DXT1_EXT GL_COMPRESSED_RGBA_S3TC_DXT3_EXT GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 完整的加载过程代码(改改就能在MetaHook里用了): http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fwww.cnblogs.com%2Fcrsky%2Fp%2F6691611.html&urlrefer=41c83bc4a44c3e86ae908d8482c2ede4 关于如何制作一个DDS文件,可以使用Nvidia提供的DXT工具,下载地址: http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fdeveloper.nvidia.com%2Flegacy-texture-tools&urlrefer=55db686f84b229db294118cf19a2251d http://tieba.baidu.com/mo/q/checkurl?url=http%3A%2F%2Fpan.baidu.com%2Fs%2F1pKKRL3P&urlrefer=b0674c11aa74ab998700f8744e6fc55a 以下是文件大小对比:以下是图像质量对比: 原图(TGA,无压缩):DXT1(压缩比:1/8,无Alpha通道):DXT3(压缩包:1/4,Alpha通道还原较差):DXT5(压缩比:1/4,Alpha通道还原较好):
首页 1 2 下一页