gpt4 book ai didi

iOS OpenGL ES 2.0 VBO 混淆

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:18 26 4
gpt4 key购买 nike

我正在尝试在 iPhone 上渲染大量带纹理的四边形。为了提高渲染速度,我创建了一个 VBO,我利用它在单个绘制调用中渲染我的对象。这似乎运作良好,但我是 OpenGL 的新手,并且在为我的每个四边形提供独特的变换时遇到了问题(最终我正在寻找每个四边形具有自定义比例,位置和旋转) .

经过大量谷歌搜索后,似乎处理这种情况的标准方法是将统一矩阵传递给顶点着色器,并让每个四边形负责渲染自身。但这种方法似乎否定了 VBO 的目的,因为最终需要每个对象 绘制调用。

在我看来,每个对象都应该保留自己的模型 View 矩阵,并根据需要使用它来变换、缩放和旋转对象,这是有道理的。但是将单独的矩阵应用于 VBO 中的对象让我迷路了。我考虑过两种方法:

  • 将模型 View 矩阵作为非均匀属性发送到顶点着色器,并在着色器中应用它。
  • 或者在将顶点数据存储到 VBO 并发送到 GPU 之前对其进行转换

但我发现很难找到有关如何最好地处理此问题的信息这一事实让我相信我混淆了这个问题。处理此问题的最佳方法是什么?

最佳答案

这是关于如何优化许多简单几何图形的渲染的“常青”问题(一个很好的问题)(一个四边形实际上是 2 个三角形,大多数时候有 6 个顶点,除非我们使用 strip )。

无论如何,在这种情况下使用 VBO 与 VAO 并不意味着明显的优势,因为要在内存缓冲区上传输的数据的大小相当低(每个顶点 32 字节,每个三角形 96 字节,每个四边形 192 字节) 这对于现在的内存带宽来说不是很大的努力(但这取决于你的意思是多少个四边形。如果你每帧有 20.000 个四边形,那么无论如何它都会是一个问题)。

一种可能的方法是通过在每一帧构建一个新的 VAO 来批量绘制四边形,并将不同的四边形定位在您自己的坐标系中。类似于将四边形顶点移动到“虚拟”网格原点中的正确位置。然后,您只需在 VAO 中绘制一次新创建的网格。

通过这种方式,您可以在更少的调用中批量绘制多个对象。

问题是如果你的四边形需要“缩放”和“旋转”而不仅仅是平移,你可以用 CPU 计算它的实际顶点位置,但它在计算能力方面会非常昂贵。

在转移网格的方式之上的一个简单建议是为四边形的所有纹理使用纹理图集,这样您将需要更少(如果根本不需要)纹理绑定(bind)操作,这可能渲染操作成本高昂。

关于iOS OpenGL ES 2.0 VBO 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23345963/

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