【问题标题】:Gradient alpha polygon with pygame带有pygame的渐变alpha多边形
【发布时间】:2014-05-03 02:08:57
【问题描述】:

我有一个场景,我需要能够用半透明多边形覆盖场景(这可以使用支持 alpha 绘图的pygame.gfxdraw.filled_polygon 轻松完成),但问题是半透明的量必须逐渐消失在一段距离上(例如,如果 alpha 值在多边形的一端为 255,那么它在另一端为 0,并且它通过多边形从 255 混合到 0)。我已经通过绘制渐变然后在顶部绘制蒙版来实现使用渐变绘制形状,但我从未遇到过这样的情况,所以我不知道该怎么做。我需要一个可以实时运行的解决方案。有人有什么想法吗?

【问题讨论】:

  • 你现在如何绘制带有渐变的形状的未屏蔽渐变部分(大概是“实时”)?
  • 如果您使用 OpenGL,这将是微不足道的。你必须使用低级的pygame还是可以使用OpenGL?
  • 实时渲染这些多边形可以通过一些技巧来完成:渲染快速渐变(参见链接),以黑白绘制一个旋转的多边形(作为蒙版),在渐变表面上对其进行 blit(生成为1xn 表面,然后调整大小)并将其旋转回来......最重要的是缓存生成的图像以提高性能(什么内存使用!),这里的链接可能会有所帮助:pygame.org/project-gradients-307-1586.html

标签: python pygame alpha


【解决方案1】:

您可能已经想到这一点并决定反对它,但如果多边形是预先绘制的,它显然会在实时运行得更好。假设没有很多不同类型的多边形,您甚至可以根据需要调整它们的大小,这样可以节省 CPU。

另外,假设所有的多边形都是规则的,你可以有几个不同的等边三角形,在它们上面有不同方向的渐变来产生必要的形状。

您可以做的另一件事是定义您正在绘制的多边形,而不是在该形状内绘制保存在计算机上的渐变图像。

您可以做的最后一件事是用 C 或 C++ 构建您的程序(或程序的某些 CPU 密集型部分)。在编译过程中进行编译和自动优化,这些语言比 python 快得多,并且更适合您正在尝试做的事情。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 2014-01-19
    • 2014-12-03
    • 2018-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多