代码之家  ›  专栏  ›  技术社区  ›  Jookia

在OpenGL中绘制矢量图形?[副本]

  •  15
  • Jookia  · 技术社区  · 15 年前

    是否有方法加载矢量图形文件,然后使用OpenGL进行渲染?这是一个模糊的问题,因为我不太了解矢量图形的文件格式。不过,我知道SVG。

    5 回复  |  直到 15 年前
        1
  •  6
  •   Stefan Monov    15 年前

    让我详细谈谈格雷格的回答。

    • 一个Qt小部件;
    • 尤其是基于GL的Qt小部件(QGLWidget);

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

    1. 停止使用当前设置窗口(和GL上下文)的方法,开始使用QGLWidget进行所有渲染, SVG呈现。这可能是一个相当小的变化,取决于你的需要。QGLWidget的功能并没有特别的限制。
    2. 使用QSvgRenderer渲染到一个QImage,然后将来自该QImage的数据放入一个GL纹理(与通常一样),并按您所需的任何方式渲染它(例如,将其渲染到一个矩形GL_四边形)。可能性能比其他方法差,但对代码的更改最少。

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

    这有一个缺点。不同的显卡实现OpenGL的方式略有不同,Qt不能(也不能)解释所有这些差异。因此,例如,如果您的用户有一个便宜的Intel显卡,那么他的显卡不支持OpenGL抗锯齿,这意味着如果您将SVG直接呈现给QGLWidget,它也会看起来有锯齿(jaggy)。通过一个气象可以避免这样的问题。

    可以 在实时缩放时也可以使用QImage方法。这取决于你需要多快。您可能需要仔细的优化,例如重用同一个QImage,并为QPainter启用剪裁。

        2
  •  9
  •   got trolled too much this week    11 年前

    从2011年开始,最先进的是马克·基尔加德的孩子, NV_路径渲染

    NV_path_渲染现在由谷歌的Skia库在后台使用(如果可用)。(英伟达在2013年底和2014年贡献了该准则。)

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

    一个缺乏(或完全没有)供应商支持或学术浮华的新贵是 纳米VG https://github.com/memononen/nanovg )鉴于OpenGL上的2D库数量随着时间的推移而来又去,在我看来,使用一些主要供应商不支持的东西是一个很大的赌注。

        3
  •  5
  •   Alexandre Borela    8 年前
        4
  •  2
  •   Greg S    15 年前

    Qt 对使用OpenGL功能直接渲染SVG图像有很好的支持(请参阅 QSvgRenderer ).

        5
  •  0
  •   horatius83    15 年前

    它有像GLúLINE和GLúLINEúSTRIP这样的基本体,用于在空间中绘制线(如果这是您的意思的话)。编辑:此网站有一些信息: http://www.falloutsoftware.com/tutorials/gl/gl2p5.htm

    推荐文章