【问题标题】:Is it possible to mix VBO and immediate rendering in OpenGL ES?是否可以在 OpenGL ES 中混合 VBO 和立即渲染?
【发布时间】:2023-03-17 04:50:02
【问题描述】:

我正在开发一个 OpenGL ES 应用程序,我需要可视化非常大的网格(大约 700000 个三角形)。问题是我没有足够的 VBO 空间用于这些网格,如果我使用立即渲染,FPS 会下降 60% 或更多(从使用较少三角形的实验中预测)。是否有中间解决方案,我可以将 VBO 的最大尺寸用于部分网格,然后在其余部分使用立即渲染?

【问题讨论】:

    标签: graphics mobile opengl-es


    【解决方案1】:

    您不可能同时看到所有 700000 个顶点。尝试修剪那些你看不到的并将其余的粘贴在 VBO 中。

    它甚至不需要很精确,只要想出一个快速的方法来消除你视野之外的大部分三角形(或在物体后面或靠得太近而无所谓或以其他方式不可见)。

    【讨论】:

    • 问题是这是一种 CAD 可视化工具,我一次只能看到一个对象,所以我无法想象如何修剪它……我喜欢什么你的回答是,也许我可以玩一点缩放级别。因此,在加载时,我可以生成对象的多个抽取并根据缩放级别更改它们。放大时,有没有一种快速的方法可以只保留我在视口中看到的三角形?
    • @Federico,您可以明确地将模型修剪为 CAD 可视化工具。您的用户根本看不到半个像素宽的三角形(缩小)或视图之外的三角形(放大)。无论哪种方式,都有一些东西可以放手。至于一种方法,将您的模型拆分为边界框(aabb)并在绘制哪些框实际上位于视口内之前进行测试(简单)。
    • @Federico,至于缩小的情况,看看一些 lod 算法。最简单的例子是计算屏幕空间中顶点之间的距离,如果它太小而不重要,则开始一次删除一个顶点,直到它们之间的距离足够宽。
    【解决方案2】:

    这是在某种嵌入式或手持平台上吗? 700,000 verts 是一个很大的模型,但它的内存并不多……可能 22 MB,具体取决于您的 verts 包含的内容。您是否可能达到了单个 VBO 的最大大小,而不是 VBO 的内存不足?

    您可以将模型拆分为多个 VBO,并为每个块使用一次绘制调用来渲染各个部分。如果您使用索引/剥离三角形,则需要在块之间复制一些顶点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多