有没有一种方法可以加载矢量图形文件,然后使用OpenGL渲染它?这是一个模糊的问题,因为我对矢量图形的文件格式了解不多。不过,我知道SVG。
将其转换为光栅并不是很有帮助,因为我想在对象上进行实时放大。
发布于 2010-11-10 17:21:21
让我扩展一下Greg的答案。
Qt确实有一个SVG渲染器类QSvgRenderer。此外,你在Qt中做的任何绘图都可以在任何"QPaintDevice“上完成,我们对以下”绘图设备“感兴趣:
因此,如果您决定使用Qt,您可以选择:
想知道QGLWidget到底做了什么?当你向QGLWidget发出Qt渲染命令时,它们会被转换成GL调用。当SVG渲染器发出渲染命令时,也会发生这种情况。因此,最终,您的SVG将通过一堆GL基元(线、多边形等)进行渲染。
这有一个缺点。不同的显卡实现OpenGL的方式略有不同,Qt不能(也不能)解释所有这些差异。例如,如果你的用户有一张便宜的板载英特尔显卡,那么他的显卡就不支持OpenGL抗锯齿,这意味着如果你直接把它渲染到QGLWidget上,你的SVG也会看起来有锯齿(锯齿)。通过QImage可以避免这样的问题。
在实时放大时,也可以使用QImage方法。这只取决于你需要它有多快。您可能需要仔细的优化,例如重用相同的QImage,并为您的QPainter启用剪辑。
发布于 2014-08-06 23:00:54
我看到大多数答案都是关于Qt的,尽管原始问题没有提到这一点。以下是我对OpenGL的单独回答(随着时间的推移,这也会带来很大的好处,因为它不可能在2010年给出):
自2011年以来,最先进的是Mark Kilgard的宝宝,NV_path_rendering,,它目前只是一个供应商(Nvidia)的扩展,正如你可能已经从它的名字中猜到的那样。有很多关于这方面的资料:
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库的数量,随着时间的推移,在我看来,您正在使用一些主要供应商不支持的东西,这是在下很大的赌注。
发布于 2010-12-26 16:22:59
这不是一个实现,但与您的问题和查看者非常相关。
第25章。在图形处理器 https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html上绘制矢量艺术
https://stackoverflow.com/questions/4129932
复制相似问题