2014-11-21 139 views
1

因此,我在某处读取尽可能少的VBO,并从一个VBO渲染许多对象。 我明白了,但不是那么没有组织? 我计划创建3D形状类,其中每个类的实例都有自己的VBO,它将在需要绘制时绑定。这与我之前写的相反。在OpenGL中渲染多个对象

3D应用程序(视频游戏等)如何完成这项工作?

回答

2

首先,VBO只是存储在视频卡内存中的顶点集合。您可以使用单个VBO和模型矩阵进行转换,也可以在其上应用不同的着色器和纹理。

这最好用2D游戏来解释,其中每个图形基本上是一个四边形; 4个顶点。 enter image description here

你真的需要为4个顶点的VBO重复分配淹没你的显卡内存?

相反,我们可以有一个指向VBO和模型矩阵的指针来转换它。 VBO通常存储在一个资源管理器中,所以它只要我们喜欢就留在内存中。 所以,现在我们正在重新使用一个VBO来处理所有事情,我们正在对它应用不同的转换和纹理。它看起来有很多很多的VBO,但实际上我们对于显卡的记忆效率非常高。

下面是一些伪代码:

class Sprite { 
    mat4 transform; 
    GLuint VBO = ResourceManager.quadVBO; 
} 
+0

好吧,我不明白你说关于绘制2D精灵什么。但是如果我的场景包含许多复杂的模型呢?每个模型可能有数千个顶点。我是否应该将所有这些顶点存储在一个VBO中? – Pilpel 2014-11-21 20:37:12

+0

尽可能重复使用!球体和立方体是两组完全不同的顶点,应该有不同的VBO,但是如果你有篮球和足球,你应该使用一个球体VBO,并应用适当的纹理。另外需要记住的是,可以将每个具有自己的VBO的顶点/颜色/ texcoords分开。 – Iggy 2014-11-21 21:20:43