gpt4 book ai didi

在 OpenGL ES 2.0 中使用 VBO 进行优化

转载 作者:行者123 更新时间:2023-12-03 17:33:03 25 4
gpt4 key购买 nike

我的系统由几个代表四边形的对象组成。每个四边形都由相同的顶点表示,因此,每个对象仅存储表示对象在世界中的变换及其自己的对象空间的矩阵。在每次渲染过程中,在这些矩阵用它们的帧变换更新后,它们与当前的 View 和投影矩阵相乘以形成该对象的 MVP 矩阵。然后将对象顶点与 MVP 矩阵一起发送到着色器,在着色器中顶点乘以 MVP 矩阵。这里的低效率是每个四边形是单独绘制的,这意味着每个四边形都有一个单独的调用 glDrawElements。在任何给定时刻,可能存在 50 或 60 个四边形,有些超出范围并被销毁,或者它们的动画可能完成,因此它们也被销毁,但更多会随机进入存在。将所有必要的值存储在 VBO 中并在每次传递期间仅调用一次 glDrawElements 会显着提高性能吗?

最佳答案

让我们首先用一些简单的数学来解释它:

  • 目前,您不需要将任何顶点数据推送到 GPU(每帧),但每个四边形有 12-16 个浮点矩阵数据,并在 CPU 上对每个四边形执行矩阵-矩阵乘法。
  • 将所有内容放入一个 VBO 时,您必须为每个四边形传输 4 个顶点(~12 个浮点数),但没有矩阵数据(当然,全局 VP 除外)并且您必须进行 4 个矩阵向量乘法(~1 个矩阵矩阵乘法)在 CPU 上。

  • 因此,传输的工作量和数据量并没有太大变化。但变化是,传输的数据从许多小的统一更新转移到单个大 VBO 更新,这很可能更快(两者都是因为从硬件方面来看缓冲区更新可能比多个统一更新更快,但不要把我钉在这上面,其次是因为大大减少了驱动程序开销)。最重要的是,通过使用单个大型绘制调用而不是许多更小的绘制调用,可以进一步减少开销。

    所以是的,它当然值得一试,尽管它是否真的是您特定应用程序中的“显着”改进必须进行评估。

    关于在 OpenGL ES 2.0 中使用 VBO 进行优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16051447/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com