我需要一种算法来渲染柔和的画笔笔触

时间:2008-09-17 18:10:22

标签: graphics vector-graphics

我有一系列鼠标点,笔触宽度和柔软度。我可以画出柔和的圆圈和柔和的线条。我应该使用哪种算法来绘制点数组?我希望交叉线条看起来不错,也可以看到终点。

4 个答案:

答案 0 :(得分:3)

我肯定会选择Bezier用于此目的,特别是我将实现分段立方Bezier - 它非常容易实现和掌握,并且它被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连续性)。

享受

答案 1 :(得分:2)

从Gooch& Gooch的Non-Photorealistic Rendering,您可能会发现Pham的工作很有用 - 请参阅PDF解释算法。

Tateosian有一个很好的overview article,它用漂亮的图片解释了更多细节的附加技术。单独的贝塞尔曲线绘制不会产生你想要的效果(取决于你想要的花哨程度)。但是,我肯定从保罗的工作开始,看看用你的软刷画它是否足够好。

警告这个空间里有很多patents,叹息。

答案 2 :(得分:1)

我想也许你正在寻找样条算法。

这是一个样条教程,您可能会发现它有用:

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

大多数有关图形编程的书籍都涵盖了这个主题。

干杯。

答案 3 :(得分:1)

我想通了 - 使用一个非常柔和的渐变圆,重复绘制以进行笔触,使用乘法混合。