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