2

我在使用 ImageMagick 命令行实用程序使用 DXT5 压缩算法将 png 正确转换为 DDS 文件时遇到了一些困难。

convert -format dds -define dds:compression=dxt5 leia.png leia.dds

这是使用Version: ImageMagick 6.8.9-10 Q16 x86_64 2016-09-14. 我可以在本地查看文件,所以它看起来是正确的。然而,当我将它加载到 OpenGL 中时,我只看到到处都是伪影(随机颜色像素)。要确认生成的文件是 DDS 文件:

od -bc leia.dds | head

这产生了:

$ od -bc leia.dds | head
0000000   104 104 123 040 174 000 000 000 007 020 010 000 356 002 000 000
           D   D   S       |  \0  \0  \0  \a 020  \b  \0 356 002  \0  \0
0000020   024 003 000 000 120 014 000 000 000 000 000 000 001 000 000 000
         024 003  \0  \0   P  \f  \0  \0  \0  \0  \0  \0 001  \0  \0  \0
0000040   111 115 101 107 105 115 101 107 111 103 113 000 000 000 000 000
           I   M   A   G   E   M   A   G   I   C   K  \0  \0  \0  \0  \0
0000060   000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
          \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000100   000 000 000 000 000 000 000 000 000 000 000 000 040 000 000 000
          \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0      \0  \0  \0

您可以看到包含DDS标题的标题的第一部分。

所以对于咯咯笑,我决定,嘿,也许我应该尝试使用单独的实用程序转换此图像,以确保文件没有任何问题。然后当我将此文件加载到 OpenGL 时,它工作正常。

文件下载后,我也再次检查了标题并看到:

od -bc leia-online.dds | head
0000000   104 104 123 040 174 000 000 000 007 020 010 000 356 002 000 000
           D   D   S       |  \0  \0  \0  \a 020  \b  \0 356 002  \0  \0
0000020   024 003 000 000 300 012 011 000 000 000 000 000 001 000 000 000
         024 003  \0  \0 300  \n  \t  \0  \0  \0  \0  \0 001  \0  \0  \0
0000040   111 115 101 107 105 115 101 107 111 103 113 000 000 000 000 000
           I   M   A   G   E   M   A   G   I   C   K  \0  \0  \0  \0  \0
0000060   000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
          \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0
0000100   000 000 000 000 000 000 000 000 000 000 000 000 040 000 000 000
          \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0  \0      \0  \0  \0
  1. 看来在线工具正在使用 ImageMagick,和我一样。
  2. 如果您查看第一个结果,八进制 20-23 是:120 014 000 000与在线结果:300 012 011 000。根据这个索引 20-23 指向“字节数”

所以基本上,我的基本问题是:如何使用 ImageMagick 将 png 文件正确转换为 dds 纹理?

更新:

在线 imagemagick 生成的图像头是:

width: 788 height: 750 linearSize: 592576 mipmap_count: 1

我的本地版本的 imagemagick 生成了图像标题:

width: 788 height: 750 linearSize: 3152 mipmap_count: 1

所以我想知道我是否在某处遗漏了一个标志以使其正确写入在线版本可能正在使用的标题?

4

1 回答 1

2

事实证明,这只是我的ImageMagick版本的问题。升级自

ImageMagick 6.8.9-10 Q16 x86_64 2016-09-14 http://www.imagemagick.org

ImageMagick 7.0.6-0 Q16 x86_64 2017-06-12 http://www.imagemagick.org

解决它。感谢大家的帮助!

于 2017-06-22T03:52:03.420 回答