参考:
(Owed by: 春夜喜雨 )
nvtt: nvidia texture tools
nvtt是一个用c++写的库,可以用来做dds格式的转换,比较适用与在C++代码中集成dds转换时使用。
在window下使用的它,所以涉及到windows下的编译和对它使用。简单记录对它的使用过程如下。
从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.
把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数据结构
Surface存储的数据结构为,rgba4个channel块,数据存储分块,第一块是r,第二块是g,第三块是b,第四块是a, 数据都是float类型的。
使用Surface.data()时,注意它的颜色数据格式是rrrrr-gggg-bbbb-aaaa这种格式,而不是通常的rgba-rgba-…这种格式。可以通过Surface.channel(0-3)分别取出r/g/b/a这四块的颜色数据指针。
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
InputOptions的作用
a. 包括指定输入的图片资源信息: 包括颜色格式,颜色数据
b. 指定生成mipmap时的参数,如MipmapFilter,RoundMode等。
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型。
使用Surface中数据作为
Surface的数据源是rrrr-gggg-bbbb-aaaa的float格式,在InputOptions支持的格式种类中,InputFormat_RGBA_32F比较匹配,另外需要把数据源调整为rgba-rgba-rgba-rgba这种格式, 借用surface.channel(0-3)取出各个通道的值重新组装成该格式。
CompressionOptions作用
a. 指定输出格式,例如输出格式使用Format_DXT5
b. 指定压缩质量,例如Quality_Fastest或Quality_Production
setFormat
输出格式支持的比较多,像常用的dxt1-dxt3-dxt5等,像基本的RGB和RGBA格式等,还有mobile上的类似ETC1/ETC2/PVR等(mobile上的格式支持的不全,使用时需要注意相关库版本和约束)。
补充一点
补充一个点,建议压缩时使用Compressor.process方法来进行,这个相对来说验证的更充分一些。
其它例如OutputOptions和Compressor等就不一一说明了,这些使用积累的经验教训不多,可以参考例子来参考使用,也可以参考nvtt的参考文档来使用。
(Owed by: 春夜喜雨 )
本文发布于:2024-02-02 12:56:24,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170684978543944.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |