2009-08-02 10 views
6

का उपयोग करने में समस्या मैंने वीबीओ का उपयोग करके पहले रेडबुक उदाहरण (सफेद क्वाड) प्रस्तुत करने का प्रयास किया।
यह तत्काल मोड और वर्टेक्स सरणी के साथ ठीक काम करता है।ओपनजीएल के वीबीओ

लेकिन वीबीओ का उपयोग करते समय स्क्रीन काला रहता है। मुझे लगता है कि मैंने कुछ महत्वपूर्ण याद किया होगा।

init:

unsigned int bufIds[2]; 
glGenBuffers(2, bufIds); 
GLfloat vertices[] = { 
    0.25, 0.25, 0.0, 
    0.75, 0.25, 0.0, 
    0.75, 0.75, 0.0, 
    0.25, 0.75, 0.0 
}; 
glBindBuffer(GL_ARRAY_BUFFER, bufIds[0]); 
glBufferData(GL_ARRAY_BUFFER, 12, vertices, GL_STATIC_DRAW); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

glClearColor(0, 0, 0, 1); 
glColor3f(1, 1, 1); 
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0); 

VBO (काम नहीं कर रहा) के लिए renderloop:

glClear(GL_COLOR_BUFFER_BIT); 
glEnableClientState(GL_VERTEX_ARRAY); 
glBindBuffer(GL_ARRAY_BUFFER, bufIds[0]); 
glVertexPointer(3, GL_FLOAT, 0, 0); 
glDrawArrays(GL_QUADS, 0, 12); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glDisableClientState(GL_VERTEX_ARRAY); 

शिखर सरणियों के लिए renderloop (कार्य):

glClear(GL_COLOR_BUFFER_BIT); 
glEnableClientState(GL_VERTEX_ARRAY); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 
glVertexPointer(3, GL_FLOAT, 0, vertices); 
glDrawArrays(GL_QUADS, 0, 12); 
glDisableClientState(GL_VERTEX_ARRAY); 

उत्तर

5

अरे मैं सिर्फ यह सोचा बाहर से बफर की सामग्री को वापस पढ़ने की कोशिश कर रहा है:

मैं केवल 12

glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(GLfloat), vertices, GL_STATIC_DRAW); 

की 12 * sizeof (GLfloat) के साथ बफर आवंटित करने के बजाय जरूरत है मेरी कोड

GLfloat vertices2[12]; 
glBindBuffer(GL_ARRAY_BUFFER, bufIds[0]); 
glGetBufferSubData (GL_ARRAY_BUFFER, 0, 12 * sizeof(GLfloat), vertices2); 
glBindBuffer(GL_ARRAY_BUFFER, 0); 

for (int i = 0; i < 4; i ++) { 
    LOG_DEBUG << "point " << i << ": " << vertices2[ i * 3 + 0 ] << "/" << vertices2[ i * 3 + 1 ] << "/" << vertices2[ i * 3 + 2 ]; 
} 
+0

+1 बहुत बढ़िया वापस पढ़ें! मुझे बिल्कुल वही समस्या थी, बहुत बहुत धन्यवाद! –