在openGL中渲染一个Photoshop风格的画笔

时间:2010-10-26 13:32:47

标签: ipad opengl-es photoshop brush

我有我的程序以编程方式定义的行。我想要做的是沿着它们渲染画笔笔划。

我认为我想要的画笔类型的方式是,它只是有一个纹理,大多是透明的,而你所做的是,将这个纹理渲染到路径中每个像素的中心,然后它们混合在一起创建笔画。

现在假设这甚至有效,我打算打赌它太贵了(针对ipad和其他移动芯片,HATE填充和alpha混合)

那么,还有其他选择吗?

如果它可以实时完成(即,每帧更新的路径样条),那将是理想的。但如果没有,在ipad上只需几分之一秒也会很好(样条线连接节点,用户可以拖动节点,从而转换样条曲线,但是对于样条曲线更简单的填充是可以接受的。正在四处走动,然后一旦释放它就重新计算刷子)

对于那些想知道的人,我正试着这么做,所以粗线看起来像是用铅笔制作的。它应该看起来像现实生活。

我认为只是将拉丝样条线渲染为纹理,但由于样条曲线可以是任何长度,在任何方向上,专用整个矩形纹理以包含整个样条曲线都会成本高昂......

样条曲线不可避免地被分解为四边形以进行渲染,因此我想到最初将画笔渲染到纹理,然后生成优化的纹理,每个四边形分离并尽可能整齐地打包到纹理中。

但是两个渲染纹理...算法来创建优化的纹理,使四边形仍然无缝地相互融合......听起来像一场噩梦,甚至没有实时。

所以是的,关于如何在openGL中在ipad上实时绘制样条粗线条的任何想法?

1 个答案:

答案 0 :(得分:1)

从我的角度来看,你想要的是渲染一条线:

  • 有纹理
  • 边缘渐弱(即没有锐边)
  • 遵循样条

为了实现这些目标,我首先将样条曲线分解为一系列与曲线非常接近的线段(您可以根据您希望它的准确程度与速度有多快或多或少地细化)你希望它呈现)。

一旦你有这些,你将需要将每个分段分成3个四边形,一个遍布线段的中间,作为线的完全不透明的部分,并且在线的每个边缘上的一个将褪色完全透明。

您需要使用一些数学运算来确保沿着一个平均分割2个线段的矢量挤出四边形(即使每个线段与拉伸矢量之间的角度相等)。这将确保您在连接的钝角部分没有间隙,并在锐角部分重叠。

在所有这些之后,你只需要使用顶点位置作为UV坐标(虽然可能会缩放)并允许纹理环绕。

使用此方法,您应该得到一个网格,其中有一条实线粗线贯穿样条曲线的中间,“fins”逐渐变细为完全透明。这应该非常接近你想要的效果,同时只渲染到相关的像素(即没有完全透明像素的巨大区域),并且具有非常小的内存开销。


我在这里有点模糊,因为单独使用文本很难解释,而且没有编写深入的教程。如果您需要更多信息,只需评论您坚持的内容,我将进一步详细说明。

相关问题