2016-03-21 78 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(...); 
} 

這確實需要對一個對象按對象的基礎上的所有內容設置。

相關問題