有没有办法加载矢量图形文件,然后使用OpenGL渲染它?这是一个模糊的问题,因为我对矢量图形的文件格式了解不多。不过,我知道SVG。在OpenGL中渲染矢量图形?
把它变成光栅并不是真的有用,因为我想对对象进行实时放大。
有没有办法加载矢量图形文件,然后使用OpenGL渲染它?这是一个模糊的问题,因为我对矢量图形的文件格式了解不多。不过,我知道SVG。在OpenGL中渲染矢量图形?
把它变成光栅并不是真的有用,因为我想对对象进行实时放大。
让我扩展Greg的答案。
的确,Qt有一个SVG渲染器类QSvgRenderer。此外,您在Qt中执行的任何绘图都可以在任何“QPaintDevice”上完成,我们对以下“绘图设备”感兴趣:
所以,如果你决定使用Qt,你的选择是:使用
想知道QGLWidget究竟做了什么?那么,当您向QGLWidget发出Qt渲染命令时,它们会被转换为GL呼叫。当渲染命令由SVG渲染器发出时也会发生这种情况。所以最终,你的SVG最终将通过一系列GL基元(线,多边形等)呈现。
这有一个缺点。不同的视频卡实现OpenGL的方式略有不同,而Qt没有(也不能)解决所有这些差异。举例来说,如果您的用户使用便宜的英特尔显卡,那么他的显卡不支持OpenGL反锯齿,这意味着如果您直接将其渲染到QGLWidget,您的SVG也会显示别名(锯齿形)。通过QImage可以避免这样的问题。
您可以也可以在实时放大时使用QImage方法。这取决于你需要多快。您可能需要谨慎优化,例如重复使用相同的QImage,并为您的QPainter启用裁剪。
它具有像GL_LINES和GL_LINE_STRIP的原始图形,用于在空间绘制线条,如果这就是你的意思。编辑:本网站有一些信息:http://www.falloutsoftware.com/tutorials/gl/gl2p5.htm
澄清我的问题。 – Jookia 2010-11-09 02:34:02
Qt很好地支持使用OpenGL功能直接呈现SVG图像(请参阅QSvgRenderer的文档)。
我希望有帮助。
这不是一个实现,但与您的问题和观众非常相关。
第25章绘制矢量图的GPU https://developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html
链接被破坏(这实际上是一个仅链接的答案...) – chtz 2017-07-25 08:57:45
无关紧要,它只是一个链接而已,它仍然有用。 – 2018-02-05 20:39:08
我看到大部分的答案是关于Qt不知何故,即使原来的问题没有提到它。这是我在孤独的OpenGL方面的答案(这也从时间的推移极大地受益,因为它不能已在2010年给出):
2011年以来,技术状态是马克·基尔加德的婴儿,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库的数量已经逐渐增加,你用一种不被主要供应商支持的东西大打赌,以我的愚见。
您的监视器是一个光栅显示器,因此它最终会在某个时间点被光栅化,问题在于光栅化是否发生在足够晚的阶段,以便方便地执行您想要执行的操作。 OpenGL对任何文件格式都没有特别的支持(除了用着色器语言编写的代码之外),所以这一切都归结于你愿意写的东西。 – 2010-11-09 17:22:29
基本上,这是同样的问题http://stackoverflow.com/questions/4054612/2d-vector-graphic-renderer-for-opengl – Fizz 2014-08-06 14:57:07