Вопрос по opengl – Искажение текстурирования Quad Strip

3

У меня есть GL_QUAD_STRIP, что я текстурное наложение. Квадратная полоска складывается на себя, образуя УФ-сферу. По сути, четырехслойная полоса обычно не состоит из прямоугольников, а состоит из трапеций.

У меня проблемы с искажением текстур. Координаты текстуры правильные (например, они выстраиваются в линию, где должны). Вопрос о самих трапециевидных лицах.

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

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

Итак, я не знаю, что здесь происходит. Какие-нибудь мысли?

Вот пример нежелательного поведения. Текстура глобуса с низким разрешением, ближайшая фильтрация, отсутствие мипмапов или анизотропии: enter image description here

Ваш Ответ

2   ответа
5

Это классическая проблема при текстурировании простого четырехугольника. Именно из-за того факта (как вы правильно догадались), четырехугольник разбит на отдельные треугольники. Эти треугольники в свою очередь текстурированы независимо.

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

Чтобы решить эту проблему, вам нужно отойти от простого 2D-аффинного текстурного пространства в проективное текстурное пространство, используя полные 4-мерные текстурные координаты вместо простых 2D-текстовых координат, как объяснено выше.Вот, Вы в основном делаете то, что GL делает уже с перспективной правильной интерполяцией, но используете свою собственную перспективную проекцию для координат текстуры (в дополнение к перспективной проекции, уже сделанной для положений вершин).

Именно то, что мне было нужно; Спасибо! imallett
-1

Правильно ли отображается каждый раздел, когда он отображается в лобовом порядке (чтобы он был полностью квадратным)?

Вы можете попробовать следующую команду перед рендерингом:

glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

GL_PERSPECTIVE_CORRECTION_HINT Indicates the quality of color, texture coordinate, and fog coordinate interpolation. If perspective-corrected parameter interpolation is not efficiently supported by the GL implementation, hinting GL_DONT_CARE or GL_FASTEST can result in simple linear interpolation of colors and/or texture coordinates.

Он не говорит о перспективе правильного текстурирования. Это применимо, когда у него есть квадрат, который нарисован в виде трапеции из-за искажения перспективы. Но в первую очередь он имеет трапецию, и в этом случае правильное текстурирование в перспективе не помогает.
Да уж. Кроме того, FWIW, я уже использую это. Спасибо хоть! imallett

Похожие вопросы