Ссылки для рендеринга 2-мерных элементов (круг, прямоугольники с закругленными углами, размытые ~) - PullRequest
2 голосов
/ 18 января 2012

Я пишу Python-модуль, который должен обеспечивать простой интерфейс ООП для низкоуровневых графических платформ. Для этого необходимо создать класс-оболочку, который используется классами в модуле.

Это (пока) диаграмма классов для базовой реализации.

class diagram

Этот вопрос на самом деле не о дизайне пакета, но если у вас есть вопросы к нему или есть идея, что может быть лучше, я не буду возражать против комментариев / критиков.

Класс DrawArea является связующим звеном между платформой низкого уровня и классами в пакете. События обычно начинаются здесь, поскольку оболочка должна распознавать события мыши / клавиатуры и сообщать об этом своим детям.

Теперь, как вы можете видеть, класс DrawArea должен реализовывать некоторые функции для отображения базовых элементов в графическом интерфейсе. Теперь я хотел бы узнать о магии рендеринга кругов, скругленных прямоугольников, линий (с толщиной) и о сглаживании. Одна из причин этого заключается в том, что я просто заинтересован в этой теме, а другая в том, что я хотел бы представить реализацию с пакетом. (Будет написано на C / C ++, я уверен, что Python будет медленным для таких операций рендеринга, не так ли?)

Теперь мои вопросы :

  1. Есть ли хорошие ссылки на то, как визуализировать круги, эллипсы, скругленные прямоугольники или линии (с толщиной, однопиксельная линия проста ...)?
  2. Есть ли хорошие рекомендации о том, как реализовать сглаживание?
    • Например, сглаживание выполняется при рендеринге элемента или применяется после выполнения всех операций рендеринга?
  3. Было бы лучше использовать что-то вроде Path класса, который будет отображаться? То есть векторизованное представление формы, которая должна быть представлена. Это имело бы преимущество для рендеринга любых видов двумерных форм, но я не знаю, как это реализовать. Есть хорошие ссылки для рендеринга векторной графики?

1 Ответ

5 голосов
/ 21 января 2012

Anti-Grain Geometry - Высококачественная 2D-графика - Высококачественный движок рендеринга для C ++ - это библиотека программирования , которая является моим любимым выбором для рендеринга векторной графики.

Возможно, вы захотите сделать обертку из этого (посмотрите документацию ), посмотрите sources или ...

Перейти к Исследования раздел , где вы можете найти много информации, как это сделать: «Высококачественная 2D-графика - высококачественный рендеринг».Линии жаровни и другие темы упоминаются там.Мой любимый раздел - «Экспозиции растеризации растровых данных» о субпиксельном рендеринге.

Если вам интересно, как оптимизировать рисование линий, многоугольников и т. Д. Даже на уровне сборки C +,

Вот пример одного из многих алгоритмов 2D компьютерной графики:

...