У меня возникли трудности с использованием утилиты командной строки 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
- Похоже, онлайн-инструмент использует ImageMagick, как и я.
- Если вы посмотрите на первый результат, то 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
Поэтому мне интересно, не упустил ли я где-нибудь флаг, чтобы он правильно написал заголовок, который может использовать онлайн-версия?