В файле DDS вы можете обнаружить текстуры с альфа-битами 0/1? - PullRequest
1 голос
/ 21 августа 2008

В моем движке мне нужно иметь возможность обнаруживать текстуры DXT1 с текселями с 0 альфа (например, вырез для оконной рамы). Это легко для текстур, которые я сжимаю сам, но я не уверен в том, что текстуры уже сжаты.

Есть ли простой способ узнать из заголовка, содержит ли изображение DDS альфа?

Ответы [ 4 ]

2 голосов
/ 21 августа 2008

Насколько я знаю, из шапки нет возможности узнать. Есть флаг DDPF_ALPHAPIXELS, но я не думаю, что он будет установлен на основе данных в пикселях. Вам нужно было бы проанализировать блоки DXT1 и найти цвета, в которых есть 0 альфа (я полагаю, что убедитесь, что цвет также используется в блоке).

0 голосов
/ 31 января 2017

Нет, заголовок DDS использует альфа-флаги только для несжатых изображений. У меня была похожая потребность выяснить, использует ли изображение DXT1 1-битную альфа, и после долгого поиска я наткнулся на эту ссылку здесь:

В основном, если color_0 <= color_1, то существует вероятность того, что текстура имеет 1-битную альфа. Для дальнейшей проверки вам необходимо проверить следующие 32-битные пары в 2-битных парах, если они равны 11. Затем продолжить это для каждого блока, если он не найден.

0 голосов
/ 22 мая 2012

DDS - очень плохая оболочка для данных DXT (или BTC). Заголовок вам не поможет. Обычный оригинальный DXT1 не имел никакой альфы. Я считаю, что в настоящее время d3d действительно декодирует DXT1 с помощью альфы. Каждый блок DXT1 выглядит следующим образом: индексы color1 (16 бит), color2 (16 бит) (32 бита). Если 16-битное значение color1 меньше, чем color2 (просто сравнение с uint16, ничего особенного!), У блока нет альфа. В противном случае это так. Итак, чтобы ответить на ваш вопрос: пропустите заголовок, прочитайте 16 бит a, прочитайте 16 бит b, если a> b, то есть альфа. в противном случае пропустите 32 бита и повторите до eof. Другие форматы DXT, такие как DXT5, всегда имеют альфа. Очень редко люди полагаются на альфа-трюк DXT1, потому что некоторые hw (intel ..) не поддерживают его надежно.

0 голосов
/ 26 августа 2008

Я согласен с принятым ответом. Ваша работа может быть немного упрощена при использовании библиотеки "squish" для распаковки блоков.

http://www.sjbrown.co.uk/?code=squish

...