通过“快速”我想人们应该尽可能多地使用硬件设施。或三次贝塞尔曲线
用“形状”表示“胖”笔划(即大于1px宽)或奇数/非零填充的“ 2D弯曲多边形”,可能带有孔(即字母“ O” “)
我问是因为我所知道的选项有几个缺点:在CPU上并且可能使用太多/很少的三角形(即浪费/粗大)
纹理图集-必须在每次更改(形状,比例,旋转,...)时重新计算/上传纹理
签名距离字段-大规模时,细节看起来不美观或必须重新计算/上载纹理
NV_path_rendering-可以,如果它仅在Nvidia的显卡上不起作用
OpenVG-可以,如果它不仅在移动设备上不起作用?
*温和地说,在我看来OpenVG并没有完全向前发展。有谁知道它的未来前景吗?现在值得关注吗?
可以用某种方式从“ triangizing”选项中细化网格,以使形状边界至少看起来不“成角度”吗?
#1 楼
您可以使用OpenGl 4.x曲面细分着色器将Bezier控制点转换为多边形。谷歌搜索“曲面细分着色器bezier”时发现此轮廓描述了Bezier曲面和曲线的曲面细分:
http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/tessellation.1pp.pdf
这将Bezier评估从CPU转移到GPU,并减少了整个总线上的数据流。
评论
$ \ begingroup $
您可以通过详细说明甚至只是链接到进一步说明的内容来改善此答案。
$ \ endgroup $
–内森·里德(Nathan Reed)
15年11月12日在20:41
$ \ begingroup $
扩大此答案的一种方法是解决作者提到的缺点,并说明您的方法如何帮助这些缺点。
$ \ endgroup $
– trichoplax
15年11月12日在20:46
评论
这篇GPU Gems文章通过识别弯曲的船体部分并分析计算像素着色器中的覆盖率来栅格化二次曲线,可能值得一看:developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html@yuriks是的,Loop和Blinn完全忘了它。但是不是专利吗?
另请参见在SIGGRAPH Asia 2014上发布的Massively-Parallel矢量图形。
在问题中列出的选项与Loop和Blinn论文之间,我认为您已经穷尽了所有可能性。
您可以细分一条线,如此处所述。或者,您也可以在计算着色器中进行三角剖分。