You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止pyglet图形库中图形的颜色混合效果?

解决Pyglet半透明矩形重叠颜色叠加问题

问题原因

Pyglet的shapes模块默认使用GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA混合模式,导致半透明形状重叠时颜色叠加变深。你之前调用的全局GL混合命令无效,是因为每个Shape对象在渲染时会自行设置混合状态,覆盖全局参数。


解决方案

方案1:修改Shape的混合函数

使用GL_SRC_ALPHA_SATURATE, GL_ONE混合模式,该模式会让重叠区域颜色不会叠加,保持与单个矩形一致的半透明度:

import pyglet
from pyglet.gl import GL_SRC_ALPHA_SATURATE, GL_ONE

window = pyglet.window.Window(fullscreen=True)
batch = pyglet.graphics.Batch()

rectangle1 = pyglet.shapes.Rectangle(100, 100, 80, 80, color=(128, 0, 0, 128), batch=batch)
rectangle2 = pyglet.shapes.Rectangle(150, 150, 80, 80, color=(128, 0, 0, 128), batch=batch)

# 为每个矩形设置自定义混合函数
rectangle1.blend_func = (GL_SRC_ALPHA_SATURATE, GL_ONE)
rectangle2.blend_func = (GL_SRC_ALPHA_SATURATE, GL_ONE)

@window.event
def on_draw():
    window.clear()
    batch.draw()

pyglet.app.run()

方案2:合并为单个复合形状

既然两个矩形颜色完全一致,直接将它们合并成一个绘制对象,从根源避免重叠叠加问题:

import pyglet

window = pyglet.window.Window(fullscreen=True)
batch = pyglet.graphics.Batch()

# 创建包含两个矩形的复合路径
path = pyglet.shapes.Path(
    [
        # 第一个矩形(闭合路径)
        (100, 100), (180, 100), (180, 180), (100, 180), (100, 100),
        # 第二个矩形(闭合路径)
        (150, 150), (230, 150), (230, 230), (150, 230), (150, 150)
    ],
    batch=batch
)
path.fill_color = (128, 0, 0, 128)

@window.event
def on_draw():
    window.clear()
    batch.draw()

pyglet.app.run()

方案3:启用深度测试避免重复绘制

开启深度测试后,后绘制的矩形不会覆盖已有区域(z坐标默认相同),重叠区域仅显示第一个矩形的颜色:

import pyglet
from pyglet.gl import glEnable, GL_DEPTH_TEST, glDepthFunc, GL_LEQUAL, glDisable

window = pyglet.window.Window(fullscreen=True)
batch = pyglet.graphics.Batch()

rectangle1 = pyglet.shapes.Rectangle(100, 100, 80, 80, color=(128, 0, 0, 128), batch=batch)
rectangle2 = pyglet.shapes.Rectangle(150, 150, 80, 80, color=(128, 0, 0, 128), batch=batch)

@window.event
def on_draw():
    window.clear()
    glEnable(GL_DEPTH_TEST)
    glDepthFunc(GL_LEQUAL)  # z值相等时不覆盖已绘制内容
    batch.draw()
    glDisable(GL_DEPTH_TEST)

pyglet.app.run()

内容的提问来源于stack exchange,提问作者pyBro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 07:24:56