2010-09-26 20 views
9

मैं कई क्यूब्स से एक गेम बनाना चाहता हूं और इसे वेब प्लेटफ़ॉर्म का उपयोग करके मोबाइल प्लेटफॉर्म पर और वेब पर रखने की योजना बना रहा हूं। मेरी समस्या यह है कि जब मैं प्रति घन कॉल करता हूं तो मैं फ्रेम दर पर हिट करता हूं। क्या कोई तरीका है कि मैं उन्हें खींचने के लिए opengl es को एकल ड्रॉ कॉल कर सकता हूं? क्यूब्स के बीच एकमात्र अंतर स्थिति और रंग होगा।एकाधिक समान वस्तुओं को आकर्षित करने का सबसे प्रभावी तरीका?

+0

क्या एक दूसरे के सापेक्ष क्यूब्स की स्थिति समय के साथ बदलती जा रही है? – LarsH

+0

वे समय के साथ संभवतः बदल देंगे क्योंकि मैं विनाशकारी वस्तुओं को पसंद करूंगा। – Xavier

+0

यह भी देखें: http://stackoverflow.com/questions/9352355/draw-many-of-the-same-object-quickly-in-opengl – jwrush

उत्तर

4

मैं खुद को एक ही समस्या में भाग गया। मैंने इसी तरह के सवाल पूछा और कल खुद जवाब दिया। पर एक नज़र डालें:

Efficient way of drawing in OpenGL ES

आप अपने शिखर बफ़र्स बना सकते हैं और केवल एक बार gl.bufferData का उपयोग कर ग्राफिक्स कार्ड स्मृति करने के लिए उन्हें अपलोड करना चाहते हैं। फिर जब भी आप gl.drawElements या gl.drawArrays करते हैं तो उस बफर के संदर्भ का उपयोग करें। अगली बार जब तक आपके 3 डी दृश्य की सामग्री में बदलाव नहीं होता है, तो आप ग्राफिक्स कार्ड मेमोरी में अपलोड किए गए इस बफर का उपयोग कर सकते हैं।

0

यूआईटीबल व्यू के मॉडल का पालन करें कि वे कोशिकाओं को कैसे हटाते हैं। मैं एक ऑब्जेक्ट तैयार करता हूं जो आपके द्वारा खींची गई वस्तुओं का ट्रैक रखता है और उन्हें पहचानकर्ता से लिंक करता है। फिर आप उन्हें पहचानकर्ता के साथ आसानी से हटा सकते हैं। यदि आप जानते हैं कि आप एक ही ऑब्जेक्ट के कई संस्करणों को आकर्षित करने जा रहे हैं, तो उस ऑब्जेक्ट का उपयोग प्रतिपादन/आवंटन को कम करने के लिए करें।

0

यदि आप अपने glDrawElements() के लिए वेरटेक्स Arrays का उपयोग कर रहे हैं, तो मैं Vertex Buffer ऑब्जेक्ट्स का उपयोग करने के बजाय सुझाव देना चाहता हूं। यह क्लाइंट साइड (सिस्टम रैम में) के बजाय डेटा सर्वर पक्ष (जीआरएएम में) स्टोर करेगा। इस तरह आप gldrawElements() कॉल को बहुत कम CPU < -> GPU डेटा ट्रांसफर ओवरहेड के साथ कॉल कर सकते हैं।

वैकल्पिक रूप से, आप स्टोर सूची में क्यूब्स स्टोर कर सकते हैं। इस तरह आप घन को स्थानांतरित करने के लिए glTranlate() का उपयोग कर सकते हैं और उसके बाद इसे प्रदर्शित करने के लिए केवल प्रदर्शन सूची को कॉल कर सकते हैं। डिस्प्ले सूचियों का उपयोग करने के लिए एकमात्र चेतावनी यह है कि जो भी आप प्रदर्शन सूची में करते हैं वह अपरिवर्तनीय है; आप डिस्प्ले सूची में कॉल को पूरी तरह से पुन: संकलित किए बिना बदल नहीं सकते हैं।

+2

ओपनजीएल ES प्रदर्शन सूचियों का समर्थन नहीं करता है। –

संबंधित मुद्दे