Мне нужен алгоритм рендеринга мягких мазков кистью - PullRequest
2 голосов
/ 17 сентября 2008

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

Ответы [ 4 ]

3 голосов
/ 17 сентября 2008

Я бы определенно выбрал Безье для этой цели, и, в частности, я реализую кусочно-кубический Безье - его действительно легко реализовать и понять, и он широко используется в 3D Studio max и Photoshop.

Вот хороший источник для этого: http://local.wasp.uwa.edu.au/~pbourke/surfaces_curves/bezier/cubicbezier.html

Предполагая, что у вас есть порядок между точками, чтобы установить четыре контрольные точки, вы должны сделать следующее:

Я определяю касательную между точкой P [i] и точкой P [i + 1]

  • T1 = (P [i + 1] - P [i-1])
  • T2 = (P [i + 2] - P [i])

И чтобы создать кусочно между двумя точками, я делаю следующее:

  • Контрольная точка Q1: P [i]
  • Контрольная точка Q2: точка, лежащая вдоль касательной от Q1 => Q1 + 0.3T1
  • Контрольная точка Q3: точка, лежащая вдоль касательной к Q4 => Q4 - 0.3T2
  • Контрольная точка Q4: P [i + 1]

Причина, по которой я выбрал 0.3T, является произвольной, чтобы придать ей достаточную «силу», но не слишком много, вы можете использовать более сложные методы, которые также позаботятся об ускорении (непрерывность C2).

Наслаждайтесь

2 голосов
/ 13 января 2009

Начиная с Gooch & Gooch's Не-фотореалистичный рендеринг , вы можете найти полезную работу Фама - см. PDF , объясняющий алгоритм.

Есть хорошая обзорная статья от Tateosian, которая объясняет дополнительные приемы менее детально с красивыми картинками. Само по себе рисование кривой Безье не дает желаемых эффектов (в зависимости от того, насколько вы хотите получить) , Тем не менее, я, конечно, начну с работы Пола и посмотрим, достаточно ли просто использовать ее для рисования мягкой кистью.

Имейте в виду, что в этом месте много патентов , вздох.

1 голос
/ 23 сентября 2008

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

1 голос
/ 17 сентября 2008

Я думаю, что вы ищете сплайн-алгоритм.

Вот учебник по сплайну, который вам может пригодиться:

[http://www.doc.ic.ac.uk/~dfg/AndysSplineTutorial/index.html]

Этот предмет также рассматривается в большинстве книг по графическому программированию.

Приветствие.

...