Как библиотека 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.