Как библиотека d3dx сохраняет текстуры в файлы?

При использовании функции: D3DXSaveTextureToFile и передаче в D3DXIFF_BMP для создания bmp я заметил, что значения скорее оцениваются, чем даны конкретно.

Поправьте меня, если я ошибаюсь, но текстура с плавающей запятой может хранить любое значение с плавающей точкой в ​​любом данном текселе, что вывело бы его за пределы диапазона BMP, который застрял между rgb(255,255,255,255), так что кажется, что функция делает просто беря самое верхнее и самое нижнее значение текстуры и нормализуя его между этим диапазоном.

Итак, мой вопрос: возможно ли получить значения в точности так, как они есть в памяти? в том числе, когда цвета находятся за пределами спектра монитора компьютера?

1 ответ

Решение

Не используйте BMP. Используйте формат, который поддерживает нужный тип данных. Для текстур DX, кажется, D3DXIFF_PFM Формат это то, что вам нужно. Это описано так:

Формат портативных карт. Необработанный формат изображения с плавающей запятой, без какого-либо сжатия. Заголовок файла определяет ширину, высоту, монохромность или цвет изображения, а также порядок машинных слов. Пиксельные данные хранятся в виде 32-битных значений с плавающей запятой, с 3 значениями на пиксель для цвета и одним значением на пиксель для монохромного изображения.

Обратите внимание, что изображения будут большими. Текстура 256x256 в этом формате должна весить около 768 КБ.

Обновления: у вас должна быть возможность использовать команду дисплея Image Magick для просмотра изображений в этом формате. Также HDRView поддерживает формат PFM. Третий выбор может быть fv.

Другие вопросы по тегам