Проблемы с деформацией текстуры в OpenGL ES 1.1 на четырехугольных полосах из треугольных полос - PullRequest
2 голосов
/ 20 января 2011

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

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

   _____       ______       _____
  |     |     /     /       \   /
  |_____|    /_____/         \_/

    Ok         Ok           Not Ok

Я думаю, что было бы довольно просто обойти это с помощью пользовательских шейдеров в ES 2.0, но как мне добиться этого в ES 1.1?

Ответы [ 2 ]

2 голосов
/ 26 мая 2012

Одним из способов сопоставления квадратной / прямоугольной текстуры с произвольным квадратом является проективная интерполяция.Я написал статью , показывающую, как это сделать.Здесь основное внимание уделяется математике для настройки интерполяции, в то время как документ «Projective Texture Mapping», связанный в ответе rotoglup, фокусируется на настройке API для выполнения интерполяции.

Короткая версия: вы интерполируете UV через квад поспособ, аналогичный тому, как это делают графические процессоры для корректного отображения перспективы (который, как вы могли заметить, не создает видимый шов между двумя треугольниками).Чтобы сделать это, вам нужно вычислить ложное значение «глубины» для каждой вершины четырехугольника и выполнить интерполяцию, используя однородные координаты, основанные на этой «глубине».Полная информация приведена в статье, приведенной выше.

Я не уверен, что возможно и не возможно в OpenGL ES 1.1, но если он поддерживает проективное текстурирование посредством предоставления 3- или 4-мерных значений UV, тогдаэто должно быть применимо.

2 голосов
/ 22 января 2011

Если говорить прямо, аппаратная часть может выполнять линейную интерполяцию координат текстуры только в том случае, если вы не предоставляете ей информацию о перспективе / глубине.

Линейная интерполяция не позволяет правильно обрабатывать случай, который вызывает у вас проблемы.

Чтобы иметь правильную интерполяцию на своем краю, вы должны ввести перспективную информацию в свой квад.

Дополнительную информацию вы можете найти в этом техническом документе NVidia: Проективное наложение текстур .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...