OpenGL ES 2.0 texture2D bias/lod

Я использую функциональность OpenGL ES 2.0 GLSL для работы с изображениями. Чего я хочу добиться, так это выбрать определенный уровень детализации (LOD) при извлечении образца из текстуры из фрагментного шейдера. По-видимому texture2DLod() не поддерживается для шейдеров фрагментов в OpenGL ES 2.0 (но есть расширение GL_EXT_shader_texture_lod что может при желании это предоставить.)

Тем не менее, по умолчанию texture2D() Функция обеспечивает третий необязательный параметр смещения. Насколько я понимаю, этот параметр должен быть смещением, добавленным к текущему LOD.

В моих тестах я рисую квадратом размер экрана и увеличиваю текстуру, масштабируя координаты образца. Я включил mipmapping для текстуры, используя GL_LINEAR_MIPMAP_LINEAR в качестве фильтра минификации. Результат при выборке с ненулевым параметром смещения на графическом процессоре ARM Mali-400 можно увидеть на рисунке ниже.

ISTM, что некоторые пиксели используют фильтр минимизации, в то время как другие используют фильтр увеличения.

Как это контролируется? И как мне определить начальный LOD при использовании смещения? Можно ли его настроить с помощью вершинного шейдера?

Связанный вопрос является следующим:

Как сэмплер GLSL определяет минификацию и, следовательно, уровень mipmap текстуры?

texture2D с параметром смещения на ARM Mali-400

Обновление: я заметил, что если я сэмплирую текстуру так, чтобы она покрывала экран, то, похоже, он правильно просматривает mipmap (даже если он увеличен). Теперь, если я добавлю небольшое смещение к координатам сэмпла, то Я начну видеть полосу, которая видна на изображении выше (которая увеличивается еще больше). Если я не использую параметр смещения, я вообще не вижу полос.

0 ответов

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