Pyglet忽略alpha通道



我正在尝试为我正在使用Pyglet用Python编写的游戏制作一个级别编辑器。我希望能够修改我放置的任何块的黑暗度。因此,我为Block类添加了一个darkness属性。这是该类:

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))

我试图通过在图像顶部绘制一个黑色矩形,然后调整该矩形的透明度来使图像变暗。但是,无论我在__init__中将self.darkness设置为什么,矩形仍然是完全不透明的。我试着通过在我的程序顶部添加以下代码来启用pyglet.gl的颜色混合:

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

这并没有改变什么。我还尝试使用Pyglet的SolidColorImagePattern类创建一个alpha通道设置为self.darkness的黑色矩形,但这也没有起到任何作用。如何使这个矩形透明?

对于任何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)

最新更新