硬件加速绘制弯曲形状


11

如何快速绘制弯曲的形状?

  • 通过“快速”我认为应该尽可能多地使用硬件设施

  • “弯曲”是指由二次贝塞尔曲线或三次贝塞尔曲线定义的边界

  • “形状”是指“胖”笔划(即大于1px宽)或奇数/非零填充的“ 2D弯曲多边形”,可能带有孔(即字母“ O”)

我问是因为我所知道的选项有几个缺点:

  • 对形状进行三角剖分并将其发送到OpenGL-在CPU上完成最困难的工作,并且可能使用太多/很少的三角形(即浪费/粗大)

  • 纹理图集-必须在每次更改(形状,比例,旋转等)时重新计算/上载纹理

  • 带符号的距离字段-大规模时细节看起来不漂亮或必须重新计算/上载纹理

  • NV_path_rendering-可以,如果它仅在Nvidia的显卡上不起作用

  • OpenVG-可能的话,如果它不能仅在移动设备上运行


*在我看来,OpenVG并没有完全向前发展。有谁知道它的未来前景吗?今天值得关注吗?

** OpenGL 4+提供了对多边形进行动态镶嵌的方法。可以使用某种方式从“三角剖分”选项中细化网格,以使形状边界至少看起来不“成角度”吗?


2
这篇GPU Gems文章通过识别弯曲的船体部分并分析计算像素着色器中的覆盖率来栅格化二次曲线,可能值得一看:developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html
里克斯

2
@yuriks是的,Loop和Blinn完全忘记了它。但这不是专利吗?
Ecir Hana 2015年

另请参见《大规模并行矢量图形》,已发布在SIGGRAPH Asia 2014上
。– lhf

在您列出的问题中的选项与Loop和Blinn论文之间,我认为您已经穷尽了所有可能性。
内森·里德

您可以镶嵌一条线,像描述在这里。或者,您可以在计算着色器中进行三角剖分。
nikitablack

Answers:


2

您可以使用OpenGl 4.x细分着色器将Bezier控制点转换为多边形。

谷歌搜索“细分曲面着色器贝塞尔曲线”,发现此轮廓描述了贝塞尔曲面和曲线的曲面细分:

http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/tessellation.1pp.pdf

这样可以将Bezier评估从CPU转移到GPU,并减少总线上的数据流。


3
您可以通过详细说明甚至只是链接到进一步说明的内容来改善此答案。
内森·里德

1
扩大此答案的一种方法是解决作者提到的缺点,并解释您的方法如何解决这些问题。
trichoplax

0

一个人可以用硬件做曲线图。GPU Gems 3中描述了一种方法,该方法描述了该方法。用户@yuriks实际上对此进行了评论。实际上,我已快速制作了一个肮脏的演示供您查看。

曲线

图片1:硬件加速曲线整形(用三角形绘制)和webgl源

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.