所以我在某处读到了我应该尽可能少地使用VBO并从单个VBO渲染许多对象。 我明白了这一点,但不是那么有组织吗? 我计划创建3d形状类,其中每个类的实例都有自己的VBO,当需要绘制时它将被绑定。这与我之前写的相反。
3D应用程序(视频游戏等)如何完成这项工作?
答案 0 :(得分:2)
首先,VBO只是存储在显卡内存中的顶点集合。您可以使用单个VBO和模型矩阵对其进行变换,也可以在其上应用不同的着色器和纹理。
最好用2D游戏解释,每个图形基本上都是四边形; 4个顶点。
你是否真的需要通过重复分配4个顶点的VBO来充斥你的显卡内存?
相反,我们可以有一个指向VBO的指针和转换它的模型矩阵。 VBO通常存储在资源管理器中,因此只要我们愿意,它就会保留在内存中。 所以现在我们正在重复使用单个VBO,我们正在应用不同的转换和纹理。看起来有很多很多VBO,但实际上我们的显卡内存非常高效。
这是一些伪代码:
class Sprite {
mat4 transform;
GLuint VBO = ResourceManager.quadVBO;
}