मैं अपने आवेदन की गति को बढ़ाने के लिए वीबीओ को अपने वर्टेक्स सरणी कार्यों में स्थानांतरित कर रहा हूं।वर्टिस प्रस्तुत करने के लिए वीबीओ का उपयोग करने में समस्याएं - ओपनजीएल
यहाँ अपने मूल काम कर रहे शिखर सरणी प्रतिपादन फ़ंक्शन था:
void BSP::render()
{
glFrontFace(GL_CCW);
// Set up rendering states
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(Vertex), &vertices[0].x);
glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &vertices[0].u);
// Draw
glDrawElements(GL_TRIANGLES, numIndices, GL_UNSIGNED_SHORT, indices);
// End of rendering - disable states
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
महान काम किया!
अब मैं उन्हें वीबीओ में ले जा रहा हूं और मेरे कार्यक्रम ने वास्तव में मेरे ग्राफिक्स कार्ड को जवाब देना बंद कर दिया है। मेरे शिखर और सूचकांक पर सेटअप बिल्कुल वही हैं।
नए सेटअप:
vboId तो जैसे bsp.h में सेटअप है: GLuint vboId [2];
मुझे कोई त्रुटि नहीं मिलती है जब मैं केवल createVBO() फ़ंक्शन चलाता हूं!
void BSP::createVBO()
{
// Generate buffers
glGenBuffers(2, vboId);
// Bind the first buffer (vertices)
glBindBuffer(GL_ARRAY_BUFFER, vboId[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
// Now save indices data in buffer
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboId[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
}
और VBOS के लिए प्रतिपादन कोड। मुझे पूरा यकीन है कि यह यहां है। बस वर्टिक्स सरणी में किए गए वीबीओ में क्या प्रस्तुत करना चाहते हैं।
प्रस्तुत:
void BSP::renderVBO()
{
glBindBuffer(GL_ARRAY_BUFFER, vboId[0]); // for vertex coordinates
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboId[1]); // for indices
// do same as vertex array except pointer
glEnableClientState(GL_VERTEX_ARRAY); // activate vertex coords array
glVertexPointer(3, GL_FLOAT, 0, 0); // last param is offset, not ptr
// draw the bsp area
glDrawElements(GL_TRIANGLES, numVertices, GL_UNSIGNED_BYTE, BUFFER_OFFSET(0));
glDisableClientState(GL_VERTEX_ARRAY); // deactivate vertex array
// bind with 0, so, switch back to normal pointer operation
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
सुनिश्चित नहीं हैं कि क्या त्रुटि है, लेकिन मैं यकीन है कि मैं अपने प्रतिपादन समारोह गलत है हूँ। इच्छा है कि इस पर एक और एकीकृत ट्यूटोरियल था क्योंकि ऑनलाइन एक गुच्छा है लेकिन वे अक्सर एक-दूसरे से विरोधाभास कर रहे हैं।
क्या आप अभी भी इस प्रश्न की निगरानी कर रहे हैं और सही उत्तर की प्रतीक्षा कर रहे हैं या आपने इसे छोड़ दिया है (या इसे पोस्ट करने के 2 मिनट बाद हल किया गया है)? पूर्व मामले में प्रश्न को अद्यतन करने के लिए स्वतंत्र महसूस करें या पूछें कि आप क्या समझ में नहीं आए। बाद के मामले में केवल एक प्रश्न छोड़ने के लिए बुरा अभ्यास है (भले ही आपने इसे स्वयं हल किया हो)। यदि आपने पोस्ट को उत्तर से कुछ अलग करने के लिए त्रुटि की खोज की है, तो पोस्ट करने और अपने उत्तर को स्वीकार करने के लिए स्वतंत्र महसूस करें। –
@ क्रिस्टियन राउ मैंने तब तक इसे छोड़ दिया जब तक कि मुझे वर्टेक्स सरणी की बेहतर समझ न हो। तब मैं वीबीओ के लिए जाऊंगा क्योंकि मुझे लगता है कि वे समान हैं। धन्यवाद! –