Пиглет игнорирует альфа-канал - PullRequest
1 голос
/ 02 апреля 2020

Я пытаюсь создать редактор уровней для игры, которую пишу в Python, используя Pyglet. Я хочу иметь возможность изменять темноту любого блока, который я размещаю. Поэтому я добавил атрибут darkness в класс Block. Вот этот класс:

class Block:
    def __init__(self, name, image, wall):
        self.name = name
        self.image = image
        self.wall = wall
        self.darkness = 0

    def set_darkness(self, darkness):
        self.darkness = darkness

    def draw(self, x, y):
        self.image.blit(x, y)
        pyglet.graphics.draw(4, GL_QUADS, ('v2i', (x, y, x + block_width, y, x + block_width, y + block_height, x, y + block_width)), ('c4B', (0, 0, 0, self.darkness) * 4))

Я пытаюсь затемнить изображение, рисуя поверх него черный прямоугольник, а затем настраивая прозрачность этого прямоугольника. Однако независимо от того, что я установил для self.darkness в __init__, прямоугольник остается полностью непрозрачным. Я попытался включить смешивание цветов с помощью pyglet.gl, добавив этот код в начало моей программы:

from pyglet.gl import *
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)

Это ничего не изменило. Я также пытался использовать класс SolidColorImagePattern Пиглета для создания черного прямоугольника с альфа-каналом, установленным на self.darkness, но это тоже ничего не дало. Как сделать этот прямоугольник прозрачным?

1 Ответ

0 голосов
/ 02 апреля 2020

Для любой инструкции OpenGL необходим действительный и текущий Контекст OpenGL . Конечно, pyglet предоставляет контекст OpenGL, но контекст создается и становится актуальным при создании окна pyglet (OpenGL) (см. pyglet.window).

Создайте окно, прежде чем настраивать Смешивание для решения проблемы:

from pyglet.gl import *

window = pyglet.window.Window(400, 400, "OpenGL window")

glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
...