【问题标题】:how to get faster rendering of 400+ polygons with SFML如何使用 SFML 更快地渲染 400 多个多边形
【发布时间】:2011-12-15 08:51:43
【问题描述】:

我正在对移动的行星和它们之间的引力进行基本模拟,并用一大片绿色矢量来显示引力,这些向量指向引力正在拉动它们的方向以及拉力的大小。

这意味着我有 400 多条线,它们实际上是带有旋转的矩形,每帧都会重新绘制,这会降低我的帧速率。 除了减少行数之外,还有什么可以优化的吗?当今的 2d OpenGL 游戏如何在具有许多复杂多边形/颜色的情况下实现如此高的帧速率?

编辑:

SFML 会实际渲染每一帧,但我创建线条的方式是制作一个类似矩形的 sf::Shape。生成函数采用宽度,并将点 1 设置为 (0, width),将点 2 设置为 (0, -width),将点 3 设置为 (LineLength, -width),将点 4 设置为 (LineLength, width)。这形成了一个沿正 x 轴延伸的矩形。最后,我围绕 (0,0) 旋转矩形以使其朝向正确的方向,并将形状位置设置为线的起点应该在的任何位置。

【问题讨论】:

  • 你需要告诉更多关于你当前如何渲染你的线条。此外,线条不仅仅是“带有旋转的矩形”。
  • @Nicol Bolas 我的台词是 =),我在上面添加了解释。

标签: optimization opengl drawing rendering sfml


【解决方案1】:

当今的 2d OpenGL 游戏如何在具有许多复杂多边形/颜色的情况下实现如此高的帧速率?

我想通过不绘制 400 多个 4 顶点对象,每个对象都使用矩阵进行旋转和缩放。

如果你想画很多这样的东西,你将不得不停止依赖 SFML 的绘图类。这会带来很多开销。你必须以正确的方式来做:画线。

如果你坚持每条线都有一个单独的宽度,那么你就不能使用 GL_LINES。您必须改为计算“线”的四个位置并将它们粘贴在缓冲区对象中。然后,您使用单个 GL_QUADS 调用绘制它们。您需要使用正确的buffer object streaming techniques 才能使这项工作相当快。

【讨论】:

    【解决方案2】:

    大批量和VBOs。还要仔细检查您在模拟更新代码中花费了多少时间。

    快速检查:如果您在主渲染循环附近有glBegin(),您可能做错了。

    计算所有顶点位置,然后通过GL_STREAM_DRAW 将它们流式传输到 GPU。如果您可以容忍一些延迟,请使用两个 VBO 和双缓冲区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      相关资源
      最近更新 更多