參考:https://github.com/castano/nvidia-texture-tools
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
nvtt: nvidia texture tools
nvtt是一個用c++寫的庫,可以用來做dds格式的轉換,比較適用與在C++代碼中集成dds轉換時使用。
在window下使用的它,所以涉及到windows下的編譯和對它使用。簡單記錄對它的使用過程如下。
編譯nvtt庫
從github上把源代碼下載下來:
https://github.com/castano/nvidia-texture-tools
使用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
-
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 -
Surface.resize縮放圖片
resize方法可以對Surface存儲的顏色channel數據進行縮放,並且支持幾種縮放時指定的ResizeFilter和RoundMode,ResizeFilter例如常用的ResizeFilter_Box,ResizeFilter_Kaiser。
inputOptions
-
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
-
CompressionOptions作用
a. 指定輸出格式,例如輸出格式使用Format_DXT5
b. 指定壓縮質量,例如Quality_Fastest或Quality_Production -
setFormat
輸出格式支持的比較多,像常用的dxt1-dxt3-dxt5等,像基本的RGB和RGBA格式等,還有較新的類似PVR_2BPP_RGB等。 -
補充一點
補充一個點,建議壓縮時使用Compressor.process方法來進行,這個相對來說驗證的更充分一些。
其它例如OutputOptions和Compressor等就不一一說明了,這些使用積累的經驗教訓不多,可以參考例子來參考使用,也可以參考nvtt的參考文檔來使用。
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)