2012-01-18 14 views
9

मैं ओपनजीएल के लिए पूरी तरह से नया हूं इसलिए क्षमा करें अगर यह एक मूर्ख सवाल है। यह भी कोई विचार नहीं है कि इससे कोई फर्क पड़ता है, बस मामले में, मैं OpenGL ES 1.1 का उपयोग कर रहा हूं।ओपनजीएल ईएस 2 डी - जेड ऑर्डरिंग, गहराई बफर बनाम ड्राइंग क्रम में

वर्तमान में मैं बनावट के क्रम में sprites ड्राइंग कर रहा हूं, जैसा कि मैंने पढ़ा है प्रदर्शन के लिए यह बेहतर है (समझ में आता है)। लेकिन अब मैं सोच रहा हूं कि यह सही दृष्टिकोण था क्योंकि मुझे बनावट के बावजूद दूसरों के सामने होने के लिए कुछ sprites की जरूरत है।

जहां तक ​​मुझे पता है, ज़ेड-ऑर्डरिंग के लिए मेरे विकल्प या तो गहराई बफर को सक्षम करने के लिए या इसका उपयोग करने के लिए या ड्राइंग ऑर्डर को स्विच करने के लिए होगा ताकि स्प्राइट्स जेड वैल्यू के क्रम में खींचे जाए।

मैंने पढ़ा है कि गहराई बफर एक प्रदर्शन हिट हो सकता है, लेकिन ऑर्डर बदल जाएगा। मुझे क्या करना चाहिए?

+1

चूंकि प्रत्येक उचित ओपनजीएल एप्लिकेशन गहराई-बफर का उपयोग करता है (शायद एक साधारण "एक एकल 2 डी-बनावट" -example खींचें), मुझे लगता है कि आपको वास्तव में इस "प्रदर्शन हिट" कथन को थोड़ा सा (यदि भी सच हो) । –

+0

एक विकल्प पूरे मुद्दे को साइड-चरण करना है और कोकोस 2 डी जैसे ढांचे का उपयोग करना है। यह ओपनजीएल बोझ आपको बंद कर देगा। यह sprites के z-ordering का समर्थन करता है, और CCSpriteBatchNode का उपयोग करके sprites के साथ बनावट का पुन: उपयोग कर सकते हैं। (बैचिंग बनावट बाइंड और जेड-ऑर्डर परिवर्तनों को इंटरलेव करने का कोई तरीका नहीं है।) –

+0

मैं किसी और चीज की तुलना में सीखने के लिए खेल अधिक कर रहा हूं, इसलिए मैंने स्क्रैच – Dan2552

उत्तर

9

संक्षिप्त उत्तर, sprites को सॉर्ट करें।

ऐसा लगता है कि आप वास्तव में 2 डी आधारित हैं, और जब एक ज़ेड-बफर एक बहुत ही उपयोगी टूल हो सकता है, तो यह एक प्रभावशाली प्रदर्शन हिट हो सकता है यदि हार्डवेयर इसका समर्थन नहीं करता है, और यदि आप ' वास्तव में 3 डी ऑब्जेक्ट्स का उपयोग नहीं कर रहे हैं जो एक-दूसरे को छेड़छाड़ कर सकते हैं, इससे मुझे बहुत समझ नहीं आती है।

इसके अतिरिक्त, यदि आपके पास कोई स्प्राइट्स आंशिक रूप से पारदर्शी हैं, यानी अल्फा मान वाले पिक्सल हैं जो 0 या 255 (या 0.0 या 1.0 फ्लोटिंग पॉइंट का उपयोग करते हैं तो नहीं) तो आपको वैसे भी सॉर्ट करना होगा।

एक साइड नोट के रूप में, मेरा मानना ​​है कि "स्प्राइट्स" को बदलते समय खो गया प्रदर्शन केवल सतहों को स्विच करते समय होता है, और केवल दुर्लभ रूप से होता है। इस समस्या को कम करने में मदद करने का एक तरीका यह है कि आप एक छवि में एक ग्रिड पर कई अलग-अलग sprites डाल सकते हैं, और अपनी सतहों के छोटे टुकड़े sprites के रूप में उपयोग करें।

+0

से शुरू करने का फैसला किया क्योंकि ओपनजीएल मुख्य रूप से 3 डी (यहां तक ​​कि ईएस), मुझे लगता है कि एक हार्डवेयर गहराई-बफर का समर्थन नहीं करता है, ठीक है, हार्डवेयर त्वरित ओपनजीएल ES का समर्थन नहीं करता है, है ना? –

+0

मुझे नहीं लगता कि कोई भी आईओएस डिवाइस इसका समर्थन नहीं करता है (मुझे लगता है कि गलत हो सकता है)। यद्यपि आपने एक अच्छा बिंदु लाया है, क्योंकि यह एक टाइल-आधारित गेम है, इसलिए सभी टाइल्स एक छवि टाइलमैप में होंगे - इस वजह से, ऑर्डर समस्या में प्रतिपादन को प्रभावित नहीं करना चाहिए? – Dan2552

+0

बिल्कुल सही, स्विचिंग सतहों को स्विच करते समय स्पीड इश्यू केवल तब लागू होता है जब आप उस छवि को बदलते हैं जिसे आप स्मृति में से काम कर रहे हैं। यह वास्तव में केवल एक मुद्दा है जब आप वीडियो मेमोरी को भी समाप्त करते हैं। असली मुद्दा तब होता है जब ओपनगल अंतरिक्ष से बाहर हो जाता है और वीडियो मेमोरी से छवियों को अनलोड करना होता है, फिर नई छवियां लोड करें। –

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