【问题标题】:Render multiple objects in OpenGL在 OpenGL 中渲染多个对象
【发布时间】:2015-01-19 21:19:50
【问题描述】:

所以我在某处读到我应该尽可能少使用 VBO,并从单个 VBO 渲染许多对象。 我明白了,但这不是没有组织吗? 我计划创建 3d 形状类,其中类的每个实例都有自己的 VBO,在需要绘制时将被绑定。这与我之前写的相反。

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

【问题讨论】:

    标签: opengl render draw vbo


    【解决方案1】:

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

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

    您真的需要为 4 个顶点的 VBO 重复分配大量视频卡内存吗?

    相反,我们可以有一个指向 VBO 的指针和转换它的模型矩阵。 VBO 通常存储在资源管理器中,因此只要我们愿意,它就会在内存中保留多久。 所以现在我们对所有东西都重用了一个 VBO,我们对它应用了不同的转换和纹理。看起来有很多很多的 VBO,但实际上我们的视频卡内存非常高效。

    这是一些伪代码:

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

    【讨论】:

    • 好的,我明白你所说的关于渲染 2D 精灵的内容。但是如果我的场景包含许多复杂的模型怎么办?每个模型可能有数千个顶点。我还应该将所有这些顶点存储在一个 VBO 中吗?
    • 尽可能重复使用! Sphere 和 Cube 是两组完全不同的顶点,应该有不同的 VBO,但是如果你有一个篮球和一个足球,你应该使用单个球体 VBO,并应用适当的纹理。要记住的另一件事是,可以将顶点/颜色/纹理坐标分开,每个都有自己的 VBO。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多