需要用于模拟自然铅笔的线条绘制算法

时间:2014-10-20 18:57:52

标签: algorithm graphics line

我正在编写一个使用压力敏感表进行输入的绘图程序。我希望能够模拟许多其他艺术程序所具有的柔和铅笔效果(例如Paint Tool SAI,Art Rage)。我现在使用的技术是功能性的,但缺少我在更专业的程序中看到的清洁度。

我的算法目前的工作原理如下:

  • 创建表示画笔头部的位图。这只是一个透明的位图,上面画着黑色圆圈。圆的内半径为实心黑色和外半径。当您从内半径移动到外半径时,黑度从不透明变为透明。
  • 从平板电脑捕获输入事件。每个点包含(x,y)坐标以及压力值
  • 对于第一个点之后的每个点,从前一个点到当前点绘制一条线。这是通过在两点之间多次绘制(涂抹)画笔位图来完成的。选择每个涂抹之间的步长,使得后续涂抹之间存在重叠。

这种方法运行得相当不错,但结果却是一条有些破旧和锯齿的线条。

  • 我需要做的一件事是以某种方式平滑输入点,使整个笔画变得平滑。
  • 我需要做的另一件事是弄清楚如何拖动'刷头沿着这条路径行进。如果间距太远,则笔划看起来像一条圆圈。如果距离太近,则笔划会自行累积并变得非常暗。 (我试图通过间距减弱画笔来解决这个问题。这确实使事情更加一致,但是使笔画完全不透明)。

无论如何,如果我知道在哪里看,我会期待已经做了很多研究。如果有更好的铅笔绘制算法,请告诉我。

1 个答案:

答案 0 :(得分:0)

使用标准混合函数(以便重叠区域获得更高的不透明度),而不是在已经绘制的内容上绘制新圆圈,而是需要保持最大不透明度到目前为止。

只有在完成整个笔划(如在白纸上)后,才能将其与现有艺术线条混合。

图片说明了混合和保持最大不透明度之间的区别。 enter image description here