iOS OpenGL ES 2.0 VBO混淆
我试图在iPhone上渲染大量纹理四边形。 为了提高渲染速度,我创建了一个VBO,我可以在一次绘制调用中渲染我的对象。 这似乎工作得很好,但我是OpenGL的新手,并且遇到了一些问题,当涉及到为每个四边形提供独特的变换时(最终我正在寻找每个四边形都具有自定义比例,位置和旋转) 。
经过大量Google搜索之后,似乎处理这种情况的标准方法是将统一矩阵传递给顶点着色器,并让每个四元组都处理自己的渲染。 但是这种方法似乎否定了VBO的目的,最终需要每个对象的绘图调用。
在我看来,每个对象都应该保留自己的模型视图矩阵,并根据需要使用它来转换,缩放和旋转对象。 但是将单独的矩阵应用到VBO中的对象,我已经失去了。 我考虑过两种方法:
但事实是,我很难找到如何处理这个问题的信息,这让我相信我很困惑这个问题。 处理这个问题的最好方法是什么?
这是关于如何优化许多简单几何图形渲染的“常青树”问题(实际上四边形实际上是2个三角形,除非我们使用条带,大部分时间是6个顶点)。
无论如何,在这种情况下使用VBO vs VAO不应该意味着显着的优势,因为要在存储器缓冲器上传输的数据的大小相当低(每个顶点32字节,每个三角形96个字节,每个四角形192个),这是对于现在的内存带宽并不是很大的努力(但它取决于你意味着多少个四边形,如果你有每帧20,000个四边形,那么这将是一个问题)。
一种可能的方法是通过在每个框架上建立一个新的VAO,并将不同的四边形放置在您自己的坐标系中,来批量绘制四边形。 就像将四边形顶点移动到“虚拟”网格原点中的正确位置。 然后,您只需在VAO中执行新创建的网格的单个绘制。
通过这种方式,您可以在更少的调用中批量绘制多个对象。
问题在于如果你的四边形需要“缩放”和“旋转”而不仅仅是平移,你可以用CPU计算它的实际顶点位置,但它将成为计算能力方面的代价。
在传输网格的方式上,一个简单的建议是对四边形的所有纹理使用纹理图集,这样您将需要更低的(如果不需要的话)纹理绑定操作,这可能会导致代价高昂渲染操作。
链接地址: http://www.djcxy.com/p/52433.html