Local Imagemagick неправильно конвертирует в DDS (DXT5)

У меня возникли трудности с использованием утилиты командной строки ImageMagick для правильного преобразования png в файл DDS с алгоритмом сжатия DXT5.

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. Если вы посмотрите на первый результат, то Octals 20-23: 120 014 000 000 по сравнению с онлайн-результатом: 300 012 011 000. Согласно эти индексы 20-23 указывают на "количество байтов"

Итак, мой основной вопрос заключается в следующем: Как мне правильно преобразовать файл png в текстуру dds с помощью ImageMagick?

Обновление:

Онлайн-сервис imagemagick сгенерировал заголовок изображения с помощью:

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

Моя локальная версия imagemagick сгенерировала заголовок изображения:

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

Поэтому мне интересно, не упустил ли я где-нибудь флаг, чтобы он правильно написал заголовок, который может использовать онлайн-версия?


person Deftness    schedule 21.06.2017    source источник
comment
Вы сначала спросите о DTX. Тогда вы говорите ДДС. Я мало что знаю о каждом, но видимо они разные. Так что это? Лучшее, что я могу предложить, это посмотреть на страницы ImageMagick для определений для DDS. См. imagemagick.org/script/formats.php и imagemagick.org/script/command-line-options.php#define   -  person fmw42    schedule 22.06.2017
comment
Моя вина, я только что прочитал: buckarooshangar.com/flightgear/tut_dds.html. Поэтому я использую формат файла DDS для хранения изображения, сжатого алгоритмом DXT5. Я обновлю вопрос, разъяснив это.   -  person Deftness    schedule 22.06.2017
comment
Я только что провел быстрый тест, и та же команда создала изображение с правильным linearSize. Я заметил, что ImageMagick конвертирует в наиболее подходящий формат (просил dxt5, получил dxt1, так как не было альфа-канала), так что может быть и так. Проверьте четыре CC недопустимого изображения.   -  person pleluron    schedule 22.06.2017
comment
Да, только что проверил цветовые коды, и оба говорят, что они DXT5. Хм, странно - может быть, что-то не так с моей версией Imagemagick?   -  person Deftness    schedule 22.06.2017
comment
Может быть. Каков формат входного изображения?   -  person pleluron    schedule 22.06.2017
comment
Входное изображение было просто стандартным изображением PNG (общий профиль RGB).   -  person Deftness    schedule 22.06.2017


Ответы (1)


Как оказалось, дело было только в моей ImageMagick версии. Обновление с

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

to

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

починил это. Спасибо всем за помощь!

person Deftness    schedule 22.06.2017