使用pygame绘制基元时的工件?

Pau*_*cks 6 python pygame

我正在研究一些涉及使用pygame库来绘制圆形表面的代码.绘制圆圈的代码如下所示:

  surf = pygame.Surface((2000,2000))
  pygame.draw.circle(surf, 
                     pygame.Color("white"),
                     (1000,1000),
                     508,
                     50)
Run Code Online (Sandbox Code Playgroud)

问题是生成的圆圈有伪影 圈出神器

无论如何在没有得到这些文物的情况下绘制这样的圆圈?

Sig*_*erm 8

你看到的很可能是pygame.draw.circle实现的问题.很可能pygame开发人员愚蠢地假设您可以通过按顺序绘制几个圆来绘制粗圆,每个圆增加半径.这在实践中不起作用,你会得到像你看到的那样的莫尔条纹.尝试将圆线粗细增加100或200,看看会发生什么.如果它变得更糟,那就是它pygame.draw.circle的错.

解决方案是提供自己的圆形渲染例程.这当然可以做到,但为了获得最佳性能,在C/C++扩展模块中进行pygame或使用OpenGL(带或不带片段着色器)是有意义的.

要为每条扫描线获得一个完美的圆,您必须计算每条扫描线的填充区域的起点和终点.通过使用pygame.draw.line绘制单个扫描线,可以在python中以可承受的性能执行此操作.