是否可以将 VBO 保存在C++类中

Is it possible to save a VBO in a C++ class?

本文关键字:存在 C++ 类中 保存 VBO 是否      更新时间:2023-10-16

嘿伙计们,我在搞砸openGL,我目前正在绘制一个简单的立方体,我想知道我是否将 VBO/IBO/CBO 存储在我的立方体类中?

喜欢:

class Cube {
     private:
       GLuint vBO;
       GLuint cBO;
       GLuint iBO;

然后我会打电话:

 void Cube::setupDataBuffer() {
    glGenBuffers(1, &vBO);
    glBindBuffer(GL_ARRAY_BUFFER, vBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertexBufferData), vertexBufferData, GL_STATIC_DRAW);
    glGenBuffers(1, &iBO);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexBufferData), indexBufferData, GL_STATIC_DRAW);
    glGenBuffers(1, &cBO);
    glBindBuffer(GL_ARRAY_BUFFER, cBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(colorBufferData), colorBufferData, GL_STATIC_DRAW);
}

但是,如果我想在我的主节点中绘制立方体.cpp则不会出现任何内容,但是如果我将 VBO/CBO/IBO 放在我的主节点中并在那里执行其他代码,则立方体也会出现。

所以我的问题是:如何在我的类中生成和绑定缓冲区对象?顺便说一下,我正在使用opengl 3.3

你可以做这样的事情:

void Cube::draw() {
    glBindBuffer(GL_ARRAY_BUFFER, vBO);
    glEnableVertexAttribArray(...);
    glVertexAttribPointer(...);
    glBindBuffer(GL_ARRAY_BUFFER, cBO);
    glEnableVertexAttribArray(...);
    glVertexAttribPointer(...);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iBO);
    glDrawElements(...);
}

这将逐个对象完成您需要的所有上下文设置。