首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在OpenGL中渲染矢量图形?

在OpenGL中渲染矢量图形?
EN

Stack Overflow用户
提问于 2010-11-09 10:17:26
回答 5查看 23.2K关注 0票数 16

有没有一种方法可以加载矢量图形文件,然后使用OpenGL渲染它?这是一个模糊的问题,因为我对矢量图形的文件格式了解不多。不过,我知道SVG。

将其转换为光栅并不是很有帮助,因为我想在对象上进行实时放大。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-11-10 17:21:21

让我扩展一下Greg的答案。

Qt确实有一个SVG渲染器类QSvgRenderer。此外,你在Qt中做的任何绘图都可以在任何"QPaintDevice“上完成,我们对以下”绘图设备“感兴趣:

  • Qt小部件;尤其是
  • ,基于GL的Qt小部件(QGLWidget);
  • Qt图像

因此,如果您决定使用Qt,您可以选择:

  1. 停止使用当前设置窗口(和GL上下文)的方法,并开始使用QGLWidget进行所有渲染,包括SVG渲染。这可能是一个很小的变化,取决于您的需求。QGLWidget在其capabilities.
  2. Use QSvgRenderer中并没有特别限制渲染到QImage,然后将来自该QImage的数据放入GL纹理(就像你通常会做的那样),并以任何你想要的方式渲染它(例如,放入矩形GL_QUAD)。可能比其他方法的性能更差,但只需要对代码进行最少的更改。

想知道QGLWidget到底做了什么?当你向QGLWidget发出Qt渲染命令时,它们会被转换成GL调用。当SVG渲染器发出渲染命令时,也会发生这种情况。因此,最终,您的SVG将通过一堆GL基元(线、多边形等)进行渲染。

这有一个缺点。不同的显卡实现OpenGL的方式略有不同,Qt不能(也不能)解释所有这些差异。例如,如果你的用户有一张便宜的板载英特尔显卡,那么他的显卡就不支持OpenGL抗锯齿,这意味着如果你直接把它渲染到QGLWidget上,你的SVG也会看起来有锯齿(锯齿)。通过QImage可以避免这样的问题。

在实时放大时,也可以使用QImage方法。这只取决于你需要它有多快。您可能需要仔细的优化,例如重用相同的QImage,并为您的QPainter启用剪辑。

票数 6
EN

Stack Overflow用户

发布于 2014-08-06 23:00:54

我看到大多数答案都是关于Qt的,尽管原始问题没有提到这一点。以下是我对OpenGL的单独回答(随着时间的推移,这也会带来很大的好处,因为它不可能在2010年给出):

自2011年以来,最先进的是Mark Kilgard的宝宝,NV_path_rendering,,它目前只是一个供应商(Nvidia)的扩展,正如你可能已经从它的名字中猜到的那样。有很多关于这方面的资料:

  • https://developer.nvidia.com/nv-path-rendering Nvidia集线器,但登录页面上的一些材料不是最up-to-date
  • http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/opengl/gpupathrender.pdf Siggraph 2012 paper
  • http://on-demand.gputechconf.com/gtc/2014/presentations/S4810-accelerating-vector-graphics-mobile-web.pdf GTC 2014 presentation
  • http://www.opengl.org/registry/specs/NV/path_rendering.txt官方扩展文档

NV_path_rendering现在由谷歌的Skia库在幕后使用,如果可用的话。(Nvidia在2013年底和2014年贡献了代码。)

当然,您也可以加载SVG和类似的https://www.youtube.com/watch?v=bCrohG6PJQE。它们还支持路径的PostScript语法。您还可以将路径渲染与其他OpenGL (3D)混合使用,如下面的演示所示:

NanoVG是一个拥有更少(或完全没有)供应商支持或学术浮华的新贵,它目前正在开发和维护。(https://github.com/memononen/nanovg)根据OpenGL上的2D库的数量,随着时间的推移,在我看来,您正在使用一些主要供应商不支持的东西,这是在下很大的赌注。

票数 11
EN

Stack Overflow用户

发布于 2010-12-26 16:22:59

这不是一个实现,但与您的问题和查看者非常相关。

第25章。在图形处理器 https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html上绘制矢量艺术

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4129932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档