【发布时间】:2012-09-25 16:10:43
【问题描述】:
我目前正在开发一个应用程序,它使用视频投影仪来创建类似于真实激光的效果。可以在 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。
有没有更快的画圆的方法?质量不是真正的问题。
感谢您的帮助!
【问题讨论】:
-
您是否考虑过绘制 n 边形而不是圆形?应该更快,并且在 N 足够高的情况下,您不会看到太大的差异。
-
你也可以尝试关闭抗锯齿等
-
@Junuxx 我尝试了 20-gons,它们的速度大致相同。尽管@Qnan 我的设置代码中已经有
cr.set_tolerance(0.5),但您的想法看起来很有希望,还有更多吗? -
您可以在临时表面上绘制一次圆圈(具有透明背景!),然后将该临时表面绘制到“屏幕表面”。这应该避免一直光栅化圆圈的成本。
标签: python performance cairo pycairo