显示SVG在OpenGL没有中间光栅显示SVG在OpenGL没有中间光栅(Displaying SV

2019-05-13 14:38发布

我有一些简单SVG图稿(图标和字形样的东西),我想在OpenGL应用程序(在C在Debian开发++,用Qt)来显示。

显而易见的解决方案是使用ImageMagick的库来转换的SVGs光栅图像和纹理贴图他们到一些合适的多边形(或只使用好老glDrawPixels)。

不过,我想知道如果有什么事,在那里将与SVG直接转换成OpenGL调用的程序和使用OpenGL的线,面等的渲染。 任何人都知道的事情,可以做到这一点?

Answer 1:

Qt可以做到这一点。
QSvgRenderer可以采取SVG和油漆它在QGLWidget
它可能是你需要反复折腾paintEvent()升技如果你想画上QGLWidget来绘图别的比SVG等。



Answer 2:

SVGL似乎解决这个问题,但一直蛰伏了好几年。 不过你也许能找到有价值的部分代码存在。



Answer 3:

它看起来像Inkscape中有一些有趣的导出选项可能对你有用。 它们包括DXF,的povray,EPS,PS(的PostScript),XAML,乳胶和OpenDocument绘图(总干事办公室)。 也许,对于那些之一的转换器,你可以使用Inkscape中作为中介。

DXF尤其是一个可能的候选人,因为它是一种常见的3D格式了。 assimp是装载DXF一个很好的候选人。



Answer 4:

我的答案会关于显示矢量图形的OpenGL wtih一般,因为这个问题的解决方案都能够支持特别是相当平凡SVG,虽然没有支持动画SVGs(SMIL)。 由于没有什么说一下动画,我以为只有静态SVGs隐含的问题。

2011年以来,技术状态是马克·基尔加德的婴儿,NV_path_rendering,这也是目前唯一的一个供应商(英伟达)你可能已经从它的名字已经猜到了扩展。 有很多关于这一材料:

  • https://developer.nvidia.com/nv-path-rendering Nvidia的枢纽,但在着陆页上的一些材料是不是最先进的日期
  • http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/opengl/gpupathrender.pdf的Siggraph 2012纸
  • http://on-demand.gputechconf.com/gtc/2014/presentations/S4810-accelerating-vector-graphics-mobile-web.pdf GTC 2014演示文稿
  • http://www.opengl.org/registry/specs/NV/path_rendering.txt官方扩展DOC

你当然也可以负载SVGs和这样https://www.youtube.com/watch?v=bCrohG6PJQE 。 他们还支持路径的PostScript语法。 你也可以混合路径与其他的OpenGL(3D)呈现的东西,如演示了:

  • https://www.youtube.com/watch?v=FVYl4o1rgIs
  • https://www.youtube.com/watch?v=yZBXGLlmg2U

NV_path_rendering现在所使用的谷歌的场景,当可用的背后Skia的库。 (Nvidia的贡献在2013年底和2014代码),其中开罗的开发者(谁是一名英特尔员工也一样),似乎也喜欢http://lists.cairographics.org/archives/cairo/2013-March/024134 html的 ,虽然我不[但]知悉任何具体努力开罗使用NV_path_rendering。

具有更少(或没有透顶)供应商的支持或学术炫目新贵是NanoVG,这是目前开发和维护。 ( https://github.com/memononen/nanovg )鉴于2D库比OpenGL的来来去去随着时间的数量,你正在做不使用由一个主要的供应商支持的东西,在我的愚见一个大赌注。



Answer 5:

我做一个矢量绘图程序Omber有导入SVG文件的一些能力,它可以将矢量图形导出到“扁平化”,在glTF 2.0格式的3D模型。 该glTF格式非常简单,只是原始OpenGL的数据,所以你可以在阅读并用最少的代码显示。 我写了一个小Pixi.js插件显示包含使用WebGL的艺术载体glTF文件。

搅拌机也有导入SVG文件的支持。 然后,您可以将结果导出为3D文件格式,但对SVG的支持搅拌机旨在更导入简单的曲线,而不是复杂的图形。

我敢肯定还有其他的工具,可以做这样的东西为好。 一个问题是,SVG早于现代图形硬件,所以很多其特点是用OpenGL来实现,尤其是在一个有效的方式一个真正的痛苦。 像组不透明的东西,不规则的形状,基于光栅的过滤操作等的梯度会导致混乱,所以我不知道,如果SVG的更加深奥的功能通常是由可东西转换成3D格式的程序支持。



文章来源: Displaying SVG in OpenGL without intermediate raster