Сглаженная композиция по покрытию? - PullRequest
2 голосов
/ 24 декабря 2009

Кто-нибудь знает графическую систему, которая хорошо обрабатывает композицию из нескольких сглаженных линий?

Я показываю диаграмму зависимостей и получаю несколько кривых, исходящих из точки. Они нарисованы сглаженным обычным способом, смешивая частично покрытые пиксели. Таким образом, если две строки занимают одну и ту же половину пикселя, сглаживание смешивает его до 75% заполнения, а не до 50% заполнения. С достаточным количеством линий, нарисованных друг над другом, смешение пикселей сжимается, и в результате вы получаете линии с псевдонимами.

Я знаю, что у антизерновой геометрии есть алгоритмы для расчета смесей, которые учитывают линии, которые примыкают, и что передискретизация может работать, но есть ли другие подходы?

Ответы [ 3 ]

2 голосов
/ 29 декабря 2009

Обработка этой формы композиции линий будет медленной (вы должны учитывать все линии, которые падают на каждый пиксель, используя подход отложенного рендеринга). Я сомневаюсь, что есть много (если есть) библиотек, которые сделают это за вас.

Самый быстрый и простой метод (и, возможно, единственное реалистичное и экономически эффективное решение для вашего случая), который будет работать практически с любой библиотекой чертежей, состоял бы в ее суперсэмплировании - рисовании на закадровом растровом изображении с гораздо более высоким разрешением (например, 4 раза шире и выше, с линиями шириной 4 пикселя. Отключите сглаживание при рисовании, поскольку это только замедлит его), а затем уменьшите результат с помощью билинейной фильтрации. Основным недостатком является то, что он использует много памяти для закадрового растрового изображения.

1 голос
/ 29 декабря 2009

Если вам нужна существующая система, которая получает сглаженные линии «визуально правильными», вы можете попробовать использовать один из нескольких существующих 3D-рендеров, совместимых с RenderMan. Алгоритм REYES, который используют многие из этих средств визуализации, работает, разбивая примитивы на микрополигоны, а затем отбирая их в нескольких случайных точках в каждом пикселе. Таким образом, даже если у вас есть миллион строк, вместе скрывающих 50% пикселя, итоговое значение изображения покажет примерно 50% покрытия. (Так, например, миллионы сглаженных волос нарисованы на персонажах во многих анимационных фильмах.)

Конечно, использование полнофункционального 3D-рендеринга для рисования 2D-линий похоже на забивание гвоздями кувалдой. Вам понадобится довольно патологический сценарий, чтобы 3D-рендеринг был более эффективным, чем просто суперсэмплинг с традиционным 2D-рендерером.

0 голосов
/ 29 декабря 2009

Звучит так, будто вам нужна готовая библиотека для рисования, о которой я не знаю.

Однако, чтобы ответить на ваш вопрос о знании любого подходящего подхода, вы можете считать пиксель квадратом. Затем вы можете аппроксимировать любую фигуру, которую вы рисуете, как многоугольник, который пересекает блок пикселей. Обрезая эти полигоны относительно прямоугольника пикселя и друг против друга, вы можете получить очень хорошую оценку областей, связанных с каждым цветом, который пересекает пиксель для точного сглаживания. Это, конечно, очень медленно для вычисления и не подходит для интерактивного рисования.

...