2016-03-21 76 views
-1

嘿,我正在搞乱openGL,我正在绘制一个简单的立方体,我想知道如果我的VBO/IBO/CBO存储在我的立方体类中?是否可以将VBO保存在C++类中?

像:

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); 
} 

,但似乎如果我再要画立方体在我main.cpp中什么都没有,但是如果我把VBO/CBO/IBO在我的主体中,并执行其他代码以及立方体出现。

所以我的问题是:我如何生成和绑定我的班级的缓冲区对象?我被你可以做类似的方式

+0

“*我如何在我的类中生成和绑定缓冲对象?*”代码不会因为它在我的班级而改变。所以如果你知道如何使用缓冲区对象,那么你应该可以在类中使用它们。 –

回答

0

用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(...); 
} 

这确实需要对一个对象按对象的基础上的所有内容设置。

相关问题