Как вы рисуете, как карандаш? - PullRequest
39 голосов
/ 04 февраля 2009

Crayon Physics Deluxe - коммерческая игра, вышедшая недавно. Посмотрите видео по главной ссылке, чтобы понять, о чем я говорю.

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

Хотя игра по сути является оберткой для популярного Box2D Physics Engine , она имеет одну особенность, которая мне интересна, как она реализована.

Его рисунок очень очень похож на карандаш. Вы можете видеть текстуру карандаша, и когда он рисует, он изменяется по толщине и темноте, как и на самом деле рисунок карандаша.

alt text
(источник: kloonigames.com ) alt text
(источник: kloonigames.com )

Фоновая текстура находится в свободном доступе здесь .

альтернативный текст http://img267.imageshack.us/img267/1488/crayonmh7.png
Крупный план карандашного рисунка - обратите внимание на различную темноту

Какой тип алгоритма будет использоваться для рендеринга этих линий таким образом, чтобы они выглядели как Crayon? Это простая текстура со случайной толщиной и темнотой или что-то еще происходит?

Ответы [ 7 ]

21 голосов
/ 04 февраля 2009

Я помню, как читал (давным-давно) краткое описание алгоритма для этого:

  • для общего вида линии, вы разбиваете сегмент на две части в случайной точке и слегка перемещаете эту точку от ее положения (изменение зависит от расстояния до конечной точки). Повторите рекурсивно / случайно. Таким образом, ваши линии не являются "идеальными" (прямая линия)

  • для данного сегмента вы можете немного «перескочить», вытянув одну конечность или другую (или обе). Таким образом, у вас нет идеальных суставов . Если я хорошо помню, лучше всего было расширить исходные конечности, но вы можете сделать это для подсегмента, если хотите визуально разделить их.

  • Нарисуйте линии с рисунком / печатью

  • была также (уже упомянутая) возможность рисовать с разной непрозрачностью начала и конца (чтобы имитировать тенденцию к отпусканию пера в конце рисования)

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

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

Привет

7 голосов
/ 04 февраля 2009

Вот бумага , в которой используется много математики для имитации нанесения воска на бумагу с использованием модели трения. Но я думаю, что вам лучше всего использовать повторяющийся узор, как упоминал другой читатель, и изменять непрозрачность в зависимости от давления.

Для несовершенных деталей рисования линий у меня есть запись в блоге , описывающая, как это сделать, используя кривые Безье.

7 голосов
/ 04 февраля 2009

Если вы взорвете изображение, вы увидите повторяющийся шаблон штампа ... вероятно, есть небольшой ассортимент, который он использует при перемещении от a к b - может даже повернуть их ..

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

4 голосов
/ 20 мая 2010

Доступна бумага под названием , имитирующая нарисованные от руки линии карандаша , которая охватывает немного того, что вам нужно. Хотя он не дает очень подробного представления об алгоритме, авторы раскрывают основы используемых им шагов.

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

4 голосов
/ 04 февраля 2009

Вы можете основать тьму на скорости. Это просто измерение расстояния, пройденного курсором между этим кадром и последним кадром (вспомните теорему Пифагора), а затем, когда вы начнете рисовать этот отрезок на экране, отрегулируйте альфа (непрозрачность) в соответствии с измеренным расстоянием.

3 голосов
/ 14 ноября 2013

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

Пример вывода:

enter image description here

0 голосов
/ 02 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...