Рисование сглаженной трапеции - PullRequest
2 голосов
/ 05 января 2012

Я пытаюсь нарисовать сглаженную трапецию, начиная сверху и рисуя линию за линией.Когда линия не является целым числом пикселей, конечные пиксели являются средневзвешенным значением уровня фона серого и уровня трапеции, например, если длина строки составляет 128,5 пикселей, то на каждом конце уровень серого равен:

    0.25*(trapezoid_greylevel)+0.75*(background_greylevel)

К сожалению, результат не очень гладкий (я проверил это на линеаризованном дисплее):

Jagged trapezoid

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

Ответы [ 2 ]

2 голосов
/ 07 января 2012

Поскольку трапеция является выпуклой, легко классифицировать точки относительно трапеции: точка находится внутри, если она находится слева от всех краев трапеции (при условии, что трапеция ориентирована против часовой стрелки).

Предполагая квадратные пиксели (и трапецию больше, чем пиксель), вы можете легко классифицировать пиксели относительно трапеции, классифицируя их углы: если все четыре угла находятся снаружи, то пиксель находится снаружи;если все четыре угла находятся внутри, то пиксель находится внутри.Для других пикселей вы можете сделать сглаживание с помощью суперсэмплинга.

Вы также можете сделать адаптивный рендеринг с использованием квадродерева, как в Алгоритм Уорнока , но вам нужно будет реализовать более надежный тест пересечениядля квадрата против трапеции (или вообще выпуклого многоугольника).Вам нужно только определить, когда квадрат и трапецоид не пересекаются или когда квадрат находится внутри трапеции.Глубина квадродерева за пределами уровня пикселей будет определять, насколько хорошо сглаживание.

Наконец, вы также можете выполнить точный рендеринг, рассчитав процент площади пикселя, покрытой трапецией.Это вопрос обрезки полигонов, и вы можете использовать алгоритм Сазерленда – Ходжмана .

0 голосов
/ 06 января 2012

Одним из возможных решений, если скорость не является проблемой, является рисование не сглаженной трапеции с разрешением в 4 или 8 раз, а затем линейное уменьшение изображения.

...