Рисование тонны кругов в Python с использованием Каира
В настоящее время я работаю над приложением, которое использует видеопроектор для создания эффекта, похожего на настоящий лазер. Действительно хороший пример того, что я пытаюсь архивировать, можно увидеть на Youtube здесь.
По сути, это приложение должно рисовать простые движущиеся фигуры в различных цветах. У меня довольно сложная настройка, использующая 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()
Все выглядит так. Это не в состоянии выдержать 25fps с 800x600 с использованием Core2Duo.
Есть ли более быстрый способ рисовать круги? Качество на самом деле не проблема.
Спасибо за вашу помощь!
1 ответ
Cairo нацелен на высококачественный рендеринг - и он часто используется в статическом или квазистатическом рендеринге 2D-объектов.
Неудивительно, что это может быть медленным - я думаю, что первая попытка, которую я бы сделал на вашем месте, была бы использовать pygame + pyopenGL - я извиняюсь, я не привожу полный пример, но этот проект выглядит как хороший начало: http://www.willmcgugan.com/blog/tech/2007/6/4/opengl-sample-code-for-pygame/