2017-01-03 2 views
-1

Я использую текстуры для передачи огромного количества данных в мой вершинный шейдер, и он работает (необходимо преобразовать каждый пиксель rgba в 32-битный float). дело в том, что в последнее время я пытался использовать формат dds вместо jpg (гораздо быстрее загружать). Он работает для всех моих цветов/нормальных текстур (просто нужно вертикально инвертировать изображения), но это приводит к ошибкам всех моих карт данных. Я пробовал несколько вещей, например, отключение альфов, которые работают на jpg, но не на dds. Я думаю, что это вызвано интерполяцией пикселей, которая, по-видимому, отличается между jpg/png/bmp и dds.openGL: как отключить интерполяцию пикселей на текстурах dds

Есть ли способ отключить эту интерполяцию?

Если проблема не интерполяция, вы знаете, что это может быть?

+0

Если вы не указали какой-либо код, невозможно сказать, что происходит не так. – BDL

+0

Спасибо, но показывать код довольно сложно для этого. Моя точка зрения состоит в том, чтобы знать, правильно ли я прав, когда пиксельная интерполяция отличается между jpg и dds, и если это правильно, как отключить ее. – MCphylyss

+0

Форматы изображений не определяют интерполяцию, только параметры сэмплера. Также, если вы полагаетесь на потерю DXT-сжатия (как я понял, вы это делаете) для «карт данных» (каковы они?), Это нормально, чтобы получить неточные/неправильные значения. – pleluron

ответ

0

Как и pleluron, мои текстуры dds используют сжатие DXT, что приводит к потере качества. Это в сочетании с RGBA для плавающего декодирования приводит к неправильным данным. Интерполяция здесь не проблема.

+0

Также используйте 'texelFetch()' в вашем шейдере, чтобы данные не были интерполированы. – pleluron

+0

Не знаю, что, функция, я посмотрю. Большое спасибо! – MCphylyss

Смежные вопросы