Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl NV_路径_渲染替代方案_Opengl_Gpu_Bezier - Fatal编程技术网

Opengl NV_路径_渲染替代方案

Opengl NV_路径_渲染替代方案,opengl,gpu,bezier,Opengl,Gpu,Bezier,我刚刚观看了Siggraph 2012的一个非常令人印象深刻的演示: 我的问题是,这是一个专有的Nvidia扩展,在GPU上快速渲染贝塞尔路径的其他可能性是什么?或者,是否有希望最终成为OpenGL标准的一部分?是否有可能对这种情况最终发生的时间做出估计 你知道还有其他的(最好是开源的)处理GPU路径渲染的项目吗 编辑:原文件现在有一个新的“附件”: 在GPU上快速渲染Bezier路径的其他可能性是什么 将一组控制点原位细分为凸面片,凸面片由使用细分和/或几何体着色器的三角形外壳定义。然后将

我刚刚观看了Siggraph 2012的一个非常令人印象深刻的演示:

我的问题是,这是一个专有的Nvidia扩展,在GPU上快速渲染贝塞尔路径的其他可能性是什么?或者,是否有希望最终成为OpenGL标准的一部分?是否有可能对这种情况最终发生的时间做出估计

你知道还有其他的(最好是开源的)处理GPU路径渲染的项目吗

编辑:原文件现在有一个新的“附件”:

在GPU上快速渲染Bezier路径的其他可能性是什么

将一组控制点原位细分为凸面片,凸面片由使用细分和/或几何体着色器的三角形外壳定义。然后将曲率参数传递给碎片着色器,如果碎片在每个面片的边界内,该着色器将执行每个碎片测试,否则将丢弃该碎片

如果近似符合要求,则只需将网格细分为三角形网格即可。

是路径渲染的开源替代方案。有关OpenVG实现的列表,请参阅此堆栈溢出问题:

基本上,您有几个选项:使用一个OpenVG实现(如ShivaVG),使用一个OpenGL实现或扩展(如NV\U路径渲染),或者完全使用其他东西,如Direct2D

但是,NV_路径_渲染的其他替代方案甚至无法接近其功能集和渲染质量。NV_路径_渲染可以在真实透视图中处理字体(没有字体这是一件大事,你太棒了),缩放等等(在Illustrator中试试!),与3D很好地混合,使用sRGB,使用片段着色器,并且速度非常快。它还实现了用户交互,OpenVG没有指定AFAIK

独特的是,NV_路径_渲染并没有发明新的标准。相反,它实现了几个行业标准,如PostScriptSVG,重点关注质量和速度(很少同时拥有这两个标准),而这是目前在其他任何地方都找不到的

(另外,马克·基尔加德是项目负责人。来吧,这家伙很聪明。)


它会成为标准吗?很难知道。至于使用什么,这实际上取决于你在这一点上的目的/需要。正在查找应用程序的高质量路径渲染?NV_路径_渲染确保。在应用程序(尤其是移动应用程序)中寻找基本分辨率独立的图形?OpenVG可能更好。很遗憾,Nvidia的解决方案不是完全可移植的,但我会毫不犹豫地使用它。我更喜欢有一个高质量的解决方案;有时候便携性不是一切

Nvidia将他们的解决方案与OpenVG进行了比较,不幸的是,OpenVG并没有提供太多的好处。因此,是的,它可能有希望成为一种标准。但是,根据IBM的说法,未来的一切都将是嵌入式的,因此最好希望它是开放的,而不是想要更多的标准

“标准的好处在于,你有很多选择。”-- 计算机网络,第二版,第。254


有关NV_路径_渲染功能的更多信息,我建议查看以下内容:。

现成的替代方案 NanoVG()似乎有一点牵引力()。因此,您可以查看它们的实现。不过我自己还没有使用过NanoVG,而且我对它的内部结构基本不熟悉;我所知道的是,他们明确拒绝使用
NV\u path\u渲染

正如我在上面的评论中已经提到的,NV_路径_渲染现在已经在Skia中实现,并且似乎也受到了cairo的欢迎,请参见我在tjklemz的回答下面的评论,以获取关于这些细节的链接。NV_路径_渲染的一个问题是,它在某种程度上依赖于固定的函数管道,因此与OpenGL ES 2.0有点不兼容,但有一个解决方法

我会远离任何与OpenVG相关的东西。该委员会的工作已于2011年结束;它现在基本上是一个遗留产品/API。OpenVG(包括ShivaVG)的大多数实现也是古老的,根据您是否真的必须使用类似OpenVG的库,使用固定函数OpenGL,MonkVG似乎是免费库中维护最完善的(读作:最近放弃的一个)(代码:;2010年发布)。他们声称它可以通过OpenGLES1.1和2.0在Windows、MacOSX、iOS和Android上运行。(相当大的)警告是MonkVG不是OpenVG的完整实现;请参阅他们代码页上的“待办事项”部分以了解缺少的内容

我还发现cairo(&pango)的开发人员Behdad Esfahbod编写了一个新的glyph(即字体)渲染库():“GLyphy是一个使用OpenGL ES2着色语言的有符号距离场(SDF)文本渲染器。[…]GLyphy[…]使用提交到GPU的实际矢量表示SDF。这将导致非常高质量的渲染。“据我所知,它还没有在开罗使用。”。(Behdad[从Red Hat]搬到了谷歌,cairo已经有一段时间没有看到发布了,所以GLyphy可能会进入Skia,谁知道呢…)我不确定这个解决方案对任意路径有多普遍。(在另一个方向,NV_path_渲染也可以渲染字体和字距,如果您不知道的话。)在Linux.conf.au 2014上有一个演讲,如果您对GLyphy感兴趣,您一定要观看:如果您不熟悉(原始)SDF方法,请参阅

我找到了Mozilla开发人员的一篇演讲,总结了目前使用的常用方法:(时间戳是跳过介绍部分,他告诉你什么是GPU。)

DYI(可能) 顺便说一下,很多路径渲染都是命令/状态更改密集型的。我认为Mantle、DX12和OpenGL的等价物(主要是扩展)可能会改善这一点