2016-03-21 9 views
-1

Hey Leute, ich bin mit openGL rum und ich zeichne gerade einen einfachen Würfel und ich frage mich, ob ich die VBO/IBO/CBO in meiner Cube-Klasse speichern?Ist es möglich, ein VBO in einer C++ - Klasse zu speichern?

Like:

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

Und dann würde ich nennen:

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

Aber wenn ich will, dann scheint den Würfel in meinem main.cpp nichts ziehen, aber wenn habe ich die VBO/CBO/IBO in meinem main und führen Sie den anderen Code dort auch den Würfel erscheint.

Also meine Frage wäre: Wie kann ich Pufferobjekte in meiner Klasse generieren und binden? Ich arbeite mit opengl 3.3 durch die Art und Weise

+0

"* Wie kann ich Pufferobjekte in meiner Klasse generieren und binden? *" Code ändert sich nicht, nur weil er "in meiner Klasse" ist. Wenn Sie also wissen, wie Sie überhaupt Pufferobjekte verwenden, sollten Sie sie innerhalb einer Klasse verwenden können. –

Antwort

0

Sie etwas tun könnte, wie:

void Cube::draw() { 
    glBindBuffer(GL_ARRAY_BUFFER, vBO); 
    glEnableVertexAttribArray(...); 
    glVertexAttribPointer(...); 

    glBindBuffer(GL_ARRAY_BUFFER, cBO); 
    glEnableVertexAttribArray(...); 
    glVertexAttribPointer(...); 

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, iBO); 
    glDrawElements(...); 
} 

Dies macht die ganzen Kontext Setup Sie auf einer Objekt-für-Objekt-Basis benötigen.

Verwandte Themen