OpenGL. Что нужно сделать для того, чтобы сделать текст прозрачным и с твердыми краями пикселей - PullRequest
0 голосов
/ 26 октября 2018

Дано:

У меня есть x.png изображение, которое содержит 4 пикселя (пусть оно будет квадратным) с ползунками: красный, зеленый, синий и 4-й прозрачный.
enter image description here

Обязательно:

Мне нужно найти комбинацию аргументов glEnable () и / или glBlendFunc () , которая даст следующееЭффект:
1) Текстура применяется без «сглаживания», только острые края пикселя.
2) Прозрачный пиксель прозрачен.

Текущая база кода:

def set_3d(self):
    ...
    glEnable(GL_BLEND)
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
    glTranslatef(x, y, z)  # for getting scale image
   ...
   # + here is adding background rect(blue) and rect with 4 pixels

def add_alpha_rect(self, batch):
    ... # getting textures, etc.
    batch.add(
            4, GL_QUADS,
            texture_group,
            ('v3f', (x, y, z,
                     x_, y, z,
                     x_, y_, z
                     x, y_, z)),
            ('t3f', (0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 0.0)))

Текущий результат:

enter image description here

Ожидаемый результат:

enter image description here

Вопрос:

Как мне достичь этого результата?
Возможно ли это?

1 Ответ

0 голосов
/ 26 октября 2018

Вы должны установить функцию увеличения текстуры.Этот фильтр используется при увеличении текстуры.
Функция увеличения может быть установлена ​​с помощью glTexParameteri.Возможные значения: GL_LINEAR и GL_NEAREST.Начальное значение GL_LINEAR.

. Примените параметр увеличения GL_NEAREST к связанному объекту текстуры, чтобы решить вашу проблему:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)  

Обратите внимание, что параметр GL_LINEAR вызоветчто взвешенное среднее из 4 элементов текстуры, которые находятся ближе всего к указанным координатам текстуры, возвращается, GL_NEAREST вызывает возвращение значения ближайшего элемента текстуры, когда текстура просматривается вверх.

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