Рисование тонны кругов в 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/

Другие вопросы по тегам