2017-02-21 15 views
1

Я отобразил несколько символов на атласе текстуры, фон которого полностью прозрачен (изображение атласа текстуры получило альфа-канал, формат RGBA). После этого я использую текстурный атлас для рисования всех символов, пока символы на текстуре появляются.Цвет текстуры OpenGL не отображается корректно при повороте

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

Как показано на следующем рисунке: символ левой стрелки не поворачивается и не отображается правильно. Цвет на краю правого символа, который повернут, как-то изменился.

Что может быть причиной этого?

enter image description here

EDIT:

Как предложил @BDL, я изменил параметр, чтобы:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 

Но некоторые из символов до сих пор не показывают, как ожидалось: Triangle Symbols

Символ треугольника справа c дый правильный.

Я также попытался:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

Не работает.

Следует ли изменить цвет фона текстуры так же, как и цвет пикселя символов, а затем использовать GL_LINEAR в качестве опции фильтра текстуры?

+1

проверить анти-Aliasing техника – shan

+2

Какого цвета прозрачные пиксели в исходном изображении? Черный? Белый? – genpfault

+0

@genpfault Black –

ответ

0

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

Если вы хотите отключить линейной интерполяции, изменение увеличения фильтра текстуры по телефону

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
+0

Редактировать вопрос, как вы и предполагали. Символ действительно изменился, но не удовлетворительным образом. –