使用 cairo 在 Python 中绘制大量圆圈

Del*_*tor 6 python performance cairo pycairo

我目前正在开发一个应用程序,它使用视频投影仪来创建类似于真实激光的效果。什么我试图存档一个非常好的例子可以在YouTube上看到这里

基本上,该应用程序需要绘制各种颜色的简单移动形状。我有一个使用 pycairo 的非常复杂的设置,允许基元通过一组修改器来改变位置、缩放和旋转。这提供了很大的灵活性。

不幸的是,pycairo 在绘制虚线圆圈方面似乎很慢。我试着像这样画 30 个圆圈:

# setup, transforms...
# Example color-scheme:
self._colors = [(0.0, 1.0, 0.0)]
# drawing dashes one after another
for count, color in enumerate(self._colors):
    cr.set_dash(dash_len, self._dash_len * count)
    cr.set_source_rgb(color[0], color[1], color[2])

    cr.arc(0, 0, self.radius(), 0, 2 * math.pi)
    cr.stroke()
Run Code Online (Sandbox Code Playgroud)

整个事情看起来像这样。使用 Core2Duo 无法在 800x600 分辨率下维持 25fps。

有没有更快的方法来画圆圈?质量真的不是问题。

谢谢你的帮助!

jsb*_*eno 5

Cairo 的目标是高质量的渲染——它被大量用于静态或 2d 事物的准静态渲染。

难怪它会很慢——我想我在你的地方做的第一次尝试是使用 pygame + pyopenGL——很抱歉我没有提供一个完整的例子,但这个项目看起来不错开始:http : //www.willmcgugan.com/blog/tech/2007/6/4/opengl-sample-code-for-pygame/