【发布时间】:2017-11-24 23:51:05
【问题描述】:
我在使用 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 标头的标头的第一部分。
为了咯咯笑,我决定,嘿,也许我应该尝试使用a separate utility 转换此图像,以确保文件没有问题。然后,当我将此文件加载到 OpenGL 时,它工作正常。
文件下载的时候,我也再次查看了header,看到了:
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
- 看来在线工具正在使用 ImageMagick,和我一样。
- 如果您查看第一个结果,八进制 20-23 是:
120 014 000 000与在线结果:300 012 011 000。根据this 索引 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
所以我想知道我是否在某处遗漏了一个标志以使其正确写入在线版本可能使用的标头?
【问题讨论】:
-
你先问一下DTX。然后你说DDS。我对每个都知之甚少,但显然它们是不同的。那么它是哪一个?我能提供的最好的方法是查看 ImageMagick 页面以了解 DDS 的定义。见imagemagick.org/script/formats.php和imagemagick.org/script/command-line-options.php#define
-
我的错,我刚刚读到:buckarooshangar.com/flightgear/tut_dds.html。所以我使用 DDS 文件格式来存储通过 DXT5 算法压缩的图像。我将更新澄清这一点的问题。
-
我刚刚做了一个快速测试,同样的命令创建了一个具有正确线性大小的图像。我注意到 ImageMagick 转换为最合适的格式(要求 dxt5,得到 dxt1,因为没有 alpha 通道),所以可能是这样。检查无效图片的fourCC。
-
是的,刚刚检查了颜色代码,都说它们是 DXT5。嗯,奇怪 - 我的 Imagemagick 版本有什么问题吗?
-
可能是。输入图片的格式是什么?
标签: opengl imagemagick-convert dds-format