OpenGL VBO批处理最佳实践

时间:2016-12-12 20:54:26

标签: c++ opengl vbo vao

我正在创建一个2D游戏引擎作为辅助项目。我一直在做一些实验和研究,并且遇到很多人建议你在同一个VBO中批量(存储多个对象来绘制)。例如,如果我的场景中有很多树,我可以将所有树放在同一个VBO中,因为它们具有相同的内存占用量,然后使用单个glDrawArrays来绘制所有树。

这很好,它完全有道理......但后来我开始想知道如何为每棵树发送不同的变换?如何将其添加到着色器?或者这种方法假设我在CPU上进行计算并在每次绘制时发送整个VBO?

以下是我一直在关注的两个主要问题:

OpenGL VAO best practices

OpenGL How Many VAOs

1 个答案:

答案 0 :(得分:0)

您正在寻找的术语是http://tfs.visualstudio.com

您创建一个包含树模型的VAO,然后将其作为实例顶点属性放在VAO中,而不是通过制服传递模型矩阵。然后,您的树的每个实例都将使用不同的模型矩阵绘制。

您可以利用计算着色器或转换反馈来每个实例每帧更新一次模型视图产品并将其存储在VAO中(而不是按每个实例的每个顶点计算)。