में एक ही ऑब्जेक्ट को जल्दी से ड्रा करें इसलिए मैं एक गेम पर काम कर रहा हूं और मुझे एक ही ऑब्जेक्ट को आकर्षित करने की आवश्यकता है। वही आकार, एक ही आकार, एक ही रंग, बस अलग-अलग स्थान।ओपनजीएल
अभी मेरा सेटअप इस तरह है।
मैं कुछ वर्ग Renderer
है जहां उद्देश्य यह है कि स्क्रीन पर आकर्षित करने के लिए static void addVertex(float x, float y, float z);
जो एक std::vector
में शीर्ष स्टोर करेगा कॉल कर सकते हैं चाहता हूँ। Renderer
में static void draw();
ड्राइंग करते समय सभी को बुलाया जाता है, जहां सब कुछ एक वीबीओ में भर जाता है और स्क्रीन पर खींचा जाता है।
ड्रा इस तरह दिखता है:
void Renderer::draw() {
glBindBufferARB(GL_ARRAY_BUFFER_ARB, _quadID);
glBufferSubDataARB(GL_QUADS, 0, _vertexBuffer.dataSize(), _vertexBuffer.toArray());
glColorPointer(4, GL_FLOAT, 0, _colorBuffer.toArray());
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, _vertexBuffer.toArray());
glDrawArrays(GL_QUADS, 0, (_vertexBuffer.size()/3));
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
_vertexBuffer.clear();
_colorBuffer.clear();
}
कहाँ _vertexBuffer
और _colorBuffer
एक वर्ग template <class T> Buffer
को कमोबेश एक प्रबंधित मेरी प्रयोजनों के लिए std::vector<T>
है के हैं।
इस सेटअप के साथ मैं धीमा होने से पहले स्क्रीन पर लगभग 300 चीजें प्राप्त कर सकता हूं। अभी सब कुछ एक GL_QUAD है। ध्यान रखें मैं ओपनजीएल के लिए थोड़ा नया हूं, अगर उपरोक्त शर्मनाक है तो मुझे खेद है।
बहुभुजों के लिए खाते में इसे कैसे सुधार सकता हूं?
धन्यवाद, मैं निश्चित रूप से इसे आजमाउंगा! जब मैं शोध कर रहा था तब मैंने इसके बारे में थोड़ा सा देखा। – SpaceFace
[यह] (http://hacksoflife.blogspot.it/2013/04/there-must-be-50-ways-to-draw-your.html) भी उपयोगी हो सकता है। – sbabbi
यह बहुत उपयोगी था, बहुत बहुत धन्यवाद! – SRG