【问题标题】:OpenGL: How should 2D quads be stored/rendered?OpenGL:如何存储/渲染 2D 四边形?
【发布时间】:2015-07-09 19:30:11
【问题描述】:

我将模型数据存储在 VBO/IBO 中,并使用 VAO 渲染它们,据我所知,这与通常的做法差不多。

但我有为 2D 精灵和 GUI 生成的非模型四边形,它们仅包含 4 个顶点。这些四边形的位置很少相同(除非它是 GUI 的一部分),并且 UV 坐标也每帧都发生变化。此外,屏幕上任何时候都有大量的内容,至少有一千多个。

我想知道,将单个四边形传输到 GPU 并渲染它们的最佳方式是什么?

为每个 VBO 分配一个 VBO 感觉有点矫枉过正,并且将它们集中到一个新的 VBO 中创建/销毁每个帧,同样看起来很极端。但我能想到的唯一其他方法是使用即时模式,自从它贬值以来我一直在避免使用它。

【问题讨论】:

  • 为什么你觉得为每个四边形使用 VBO 是“矫枉过正”?您必须以某种方式将数据传输到 GPU,而实际上没有其他方法可以做到这一点。如果它最终太慢,您将不得不切换到其他方法,例如点精灵。
  • @AlchemicalApples - 我读过的大多数指南都强调将尽可能多的数据放在单个 VBO 中,所以我只是假设它们会带来很多开销。
  • 明确使用单个 VBO。

标签: c++ opengl 3d vbo


【解决方案1】:

您绝对可以将所有四边形放入一个 vbo 中,并在需要时只绘制一个。每个矩形有一个 vbo 是不必要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多