Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Засранец от Август 17, 2016, 00:00



Название: Qt vs DDS
Отправлено: Засранец от Август 17, 2016, 00:00
Здравствуйте.
Если вдруг где-то есть мой вопрос с решением - прошу плиз ткнуть носом... :-[
Qt 5.x умеет *.dds файлы на чтение/запись.
Но я, к сожалению, не знаю, как явно указать формат для чтения/записи файла (DXT1...DXT5).
В моем случае нужно считать файл текстуры (normal/bump map), перемешать каналы RGBA (этот не проблема) и сохранить результат в нужном формате DDS (формат выше указан).


Название: Re: Qt vs DDS
Отправлено: Igors от Август 17, 2016, 09:12
В моем случае нужно считать файл текстуры (normal/bump map), перемешать каналы RGBA (этот не проблема)
[off]Вместо перезаписи файлов обычно вращают матрицу текстуры. Да, и если файлы "голубые" (преобладает синий цвет Z) то нужно строить матрицу бампа (то еще удовольствие).[/off]


Название: Re: Qt vs DDS
Отправлено: Засранец от Август 18, 2016, 21:46
Я пока топорно меняю порядок RGBA (построчно перебираю пиксели и меняю порядок каналов, в отдельном потоке), просто приоритетная проблема - как явно указать формат файла DDS при сохранении? Если правильно понимаю, Qt сам определяет формат исходного файла.


Название: Re: Qt vs DDS
Отправлено: Авварон от Август 20, 2016, 08:43
Кутешный dds плагин я писал. Формат указать можно через subtype. Но я не осилил написать сохранение в какой-либо формат, кроме RGBA32. Тебе не повезло:)


Название: Re: Qt vs DDS
Отправлено: Засранец от Август 21, 2016, 23:26
Кутешный dds плагин я писал. Формат указать можно через subtype. Но я не осилил написать сохранение в какой-либо формат, кроме RGBA32. Тебе не повезло:)
Если не сложно, можно пример кода привести?
p.s. Без экзорцизма, WinAPI, тут не обойтись? :-( Просто я ориентировался на кроссплатформенность...
p.s. p.s. Модераторов прошу перенести тему в подходящий раздел. :-[


Название: Re: Qt vs DDS
Отправлено: Авварон от Август 23, 2016, 08:15
Есть 4 пути.
Простой - стырить исходники dds себе (я сначала обкатываю фичи тут https://github.com/ABBAPOH/imageformats) и написать сохранение самому. Работы там на полдня, имхо.
Сложный - написать сохранение самому и замержить в Qt.
Ещё более сложный - допинать меня, чтобы я это сделал:)
Либо одно из трёх:)

В идеальном мире ты бы писал что-то типа
Код:
int main()
{
    QImage image("path/to/file.png");
    QImageWriter writer("path/to/file.dds", "dds");
    if (!writer.canWrite())
         qFatal() << writer.errorString());
    writer.setSubType("DXT5");
    if (!writer.write(image))
         qFatal() << writer.errorString());
    return 0;
}

Но повторюсь, там только 1 вариант сохранения реализован.


Название: Re: Qt vs DDS
Отправлено: Засранец от Август 25, 2016, 20:20
Авварон,
Я склонировал репозиторий. Чуть позже займусь, посыпался хард, пришлось прерваться. Насчет попинать - с вопросами если, можно?:-D


Название: Re: Qt vs DDS
Отправлено: Авварон от Август 25, 2016, 21:04
В личку написал