使用nvtt转换DDS格式图片

阅读: 评论:0

使用nvtt转换DDS格式图片

使用nvtt转换DDS格式图片

参考:
(Owed by: 春夜喜雨 )

nvtt: nvidia texture tools

nvtt是一个用c++写的库,可以用来做dds格式的转换,比较适用与在C++代码中集成dds转换时使用。

在window下使用的它,所以涉及到windows下的编译和对它使用。简单记录对它的使用过程如下。

编译nvtt库

从github上把源代码下载下来:

使用vs打开project/vc12/nvtt.sln,然后编译出nvtt库和常用的几个转换用的命令行程序。

Open project/vc12/thekla.sln using Visual Studio.
Solutions for previous versions are also available, but they may not be up to date.

使用nvtt库

把src/nvtt/nvtt.h文件复制到工程目录中使用即可,并把依赖库nvtt.lib配置到工程中。
src/nvtt/tools/compress.cpp是一个使用的样例,可以供参考。

To use the NVIDIA Texture Tools in your own applications you just have to include the following header file:
src/nvtt/nvtt.h
And include the nvtt library in your projects.
The following file contains a simple example that shows how to use the library:
src/nvtt/tools/compress.cpp

使用的一些经验

Surface
  1. Surface数据结构
    Surface存储的数据结构为,rgba4个channel块,数据存储分块,第一块是r,第二块是g,第三块是b,第四块是a, 数据都是float类型的。
    使用Surface.data()时,注意它的颜色数据格式是rrrrr-gggg-bbbb-aaaa这种格式,而不是通常的rgba-rgba-…这种格式。可以通过Surface.channel(0-3)分别取出r/g/b/a这四块的颜色数据指针。

  2. Surface.setImage2D解析dds-mip-data
    Surface.setImage2D可以支持把dds格式的data数据的解析。通过Format和参数Decoder,确定了dds数据解析方式,把dds的4*4格式解析为rgba的4个channel上。
    Decoder支持3种:Decoder_D3D10,Decoder_D3D9, Decoder_NV5x

  3. resize方法可以对Surface存储的颜色channel数据进行缩放,并且支持几种缩放时指定的ResizeFilter和RoundMode,ResizeFilter例如常用的ResizeFilter_Box,ResizeFilter_Kaiser。

inputOptions
  1. InputOptions的作用
    a. 包括指定输入的图片资源信息: 包括颜色格式,颜色数据
    b. 指定生成mipmap时的参数,如MipmapFilter,RoundMode等。

  2. InputOptions.setFormat
    输入颜色信息的格式被限定在InputFormat格式类型上,这个格式有四种类型:
    enum InputFormat
    {
    InputFormat_BGRA_8UB, // Normalized [0, 1] 8 bit fixed point.
    InputFormat_RGBA_16F, // 16 bit floating point.
    InputFormat_RGBA_32F, // 32 bit floating point.
    InputFormat_R_32F, // Single channel 32 bit floating point.
    };
    这个很关键,它限定了输入颜色信息需要遵循的格式,例如:
    InputFormat_RGBA_32F, 它要求的输入颜色信息是这样子的: rgba-rgba-…,并且r|g|b|a都为float型。

  3. 使用Surface中数据作为
    Surface的数据源是rrrr-gggg-bbbb-aaaa的float格式,在InputOptions支持的格式种类中,InputFormat_RGBA_32F比较匹配,另外需要把数据源调整为rgba-rgba-rgba-rgba这种格式, 借用surface.channel(0-3)取出各个通道的值重新组装成该格式。

CompressionOptions
  1. CompressionOptions作用
    a. 指定输出格式,例如输出格式使用Format_DXT5
    b. 指定压缩质量,例如Quality_Fastest或Quality_Production

  2. setFormat
    输出格式支持的比较多,像常用的dxt1-dxt3-dxt5等,像基本的RGB和RGBA格式等,还有mobile上的类似ETC1/ETC2/PVR等(mobile上的格式支持的不全,使用时需要注意相关库版本和约束)。

  3. 补充一点
    补充一个点,建议压缩时使用Compressor.process方法来进行,这个相对来说验证的更充分一些。

其它例如OutputOptions和Compressor等就不一一说明了,这些使用积累的经验教训不多,可以参考例子来参考使用,也可以参考nvtt的参考文档来使用。

(Owed by: 春夜喜雨 )

本文发布于:2024-02-02 12:56:24,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170684978543944.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:格式   图片   nvtt   DDS
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23