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

时间:2012-10-04 15:12:43

标签: python performance cairo pycairo

我目前正在开发一款应用程序,该应用程序使用视频投影仪创建类似于真实激光的效果。我可以在Youtube here上看到我正在尝试存档的一个非常好的例子。

基本上,应用程序需要绘制各种颜色的简单移动形状。我使用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()

整个事情看起来像this。使用Core2Duo时,无法在800x600上维持25fps。

是否有更快的方式来绘制圆圈?质量不是真正的问题。

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

Cairo的目标是高质量渲染 - 它在静态或准静态渲染2d事物中得到了很多应用。

难怪它可能会很慢 - 我认为我在你的位置做的第一次尝试是使用pygame + pyopenGL - 对不起,我不是一个完整的例子,但这个项目看起来是一个好的开始: http://www.willmcgugan.com/blog/tech/2007/6/4/opengl-sample-code-for-pygame/