2010-08-25 3 views
5

मान लें कि मैं Star Field एनीमेशन प्रोग्राम करना चाहता हूं। ओपनजीएल का उपयोग करके नहीं, बल्कि स्क्रीन बफर या ऑफ-स्क्रीन बफर पर सीधे ड्राइंग करके स्क्रीन पर रखा जा सकता है।आईओएस पर उच्च प्रदर्शन पूर्ण स्क्रीन बिट-ब्लिटिंग के लिए अच्छी तकनीक क्या हैं?

टीआरएस -80 पर चल रहे स्टार फील्ड डेमो बिल्कुल एक उदाहरण है। वीडियो डिकोडिंग या पूर्ण-स्क्रीन एनिमेशन को अन्य संभावनाओं के रूप में सोचें जहां प्रति सेकंड 20+ फ्रेम की दर आवश्यक है।

ऐसा करने के लिए क्या अच्छी तकनीकें हैं? मुझे आधिकारिक और निजी एपीआई कार्यान्वयन दोनों में दिलचस्पी है।

यदि आप कर सकते हैं, तो कृपया कुछ बुनियादी कोड दिखाएं।

उत्तर

2

यहां एक आम और उचित तेज़ विधि की एक संक्षिप्त रूपरेखा है।

प्रारंभ के दौरान, पॉइंटर्स से ऑफ-स्क्रीन मेमोरी बफर तक कम से कम 2 बिटमैप संदर्भ बनाने के लिए CGBitmapContextCreate() का उपयोग करें, और अपने UIView के एक उपन्यास के रूप में एक कैलियर जोड़ें।

अपने रेंडर लूप में, अपने डबल बफर उपयोग को वैकल्पिक करें, वर्तमान ऑफ-स्क्रीन मेमोरी बफर में कॉपी करें और/या संशोधित करें, उस बफर से छवि बनाने के लिए CGBitmapContextCreateImage() का उपयोग करें, और परिणामी छवि को कैलियर सामग्री में असाइन करें ।

+0

क्या आपने इसका उपयोग किया है? आपको किस तरह की फ्रेम दर मिली? –

+0

फ्रेम दर बिटमैप आकार, डिवाइस और ओएस संस्करण पर निर्भर करती है। आईफोन 3 जी के चल रहे आईओएस 4.0 पर बड़े बिटमैप्स को हाल ही में 10 एफपीएस के तहत अच्छी तरह से चलने के रूप में रिपोर्ट किया गया है। एक 3 जीएस चल रहे ओएस 3.1.3 पर छोटे बिटमैप्स शायद उच्च ऊंचाई दर के आयाम के क्रम में चल सकते हैं। मैंने अपने आईफोन 4 पर 30 एफपीएस पर छोटे बिटमैप्स के लिए इस विधि का इस्तेमाल किया है, जिसमें कमरे को छोड़ दिया गया है। – hotpaw2

+0

10 फ्रेम प्रति सेकेंड बहुत कम है और निश्चित रूप से मेरी पुस्तक में 'उचित तेज़' नहीं है :-( –

0

इस प्रकार के प्रभाव को करने का एक आम तरीका बिटमैप ड्रा फ़ंक्शंस का उपयोग करना है जो छवियों में ऑफ़सेट की अनुमति देता है: डाउनवर्ड स्क्रॉल प्रभाव के लिए, बस अपने स्रोत स्टारफील्ड बिटमैप से दो प्रतियां स्क्रीन बफर में करें: पहले से स्रोत (0, 0) से (चौड़ाई, ऊंचाई-यॉफ़सेट) स्क्रीन (0, वाईफसेट) (चौड़ाई, ऊंचाई) तक। दूसरा, स्रोत (0, ऊंचाई-वाईफसेट) से (चौड़ाई, ऊंचाई) से स्क्रीन (0, 0) तक (चौड़ाई, यॉफ़सेट) ले जाएं। Yoffset प्रत्येक फ्रेम को बदलकर आप स्क्रॉलिंग दर को नियंत्रित कर सकते हैं, बस यह सुनिश्चित करें कि जब यह पहुंचता है (ऊंचाई) वापस 0 तक पहुंच जाता है। दिशा को उलट करना वही है, केवल यॉफ़सेट परिवर्तनों को उलटा करें। कुछ बहुत ही शक्तिशाली पूर्ण स्क्रीन स्क्रॉलिंग प्रभाव देने के लिए, उसी विधि को एक्स के साथ-साथ वाई पर भी लागू किया जा सकता है।

हम स्क्रॉलिंग वॉलपेपर और अन्य पृष्ठभूमि प्रभावों के लिए हमारे आईएसजीपीयू कोर में इस विधि का उपयोग करते हैं। प्रदर्शन आमतौर पर बहुत अधिक होता है, क्योंकि आप रैखिक स्मृति के 2 ब्लॉक स्थानान्तरण से निपट रहे हैं। चूंकि विधि स्मृति में बिटमैप्स का उपयोग करती है, इसलिए आपके पास पिक्सल बदलने के बजाय स्क्रॉलिंग की बहुत अच्छी छवियां हो सकती हैं। उपर्युक्त पैरामीटर में केवल कुछ बदलावों के साथ आप "बड़ी दुनिया" प्रभाव देने के लिए स्क्रीन से बड़े बिटमैप का भी उपयोग कर सकते हैं।

शुभकामनाएं! स्टुअर्ट, मुख्य वास्तुकार /You.i लैब्स

+0

उत्तर स्टुअर्ट के लिए धन्यवाद। दुर्भाग्यवश आप इस बात का जिक्र नहीं करते कि वास्तव में स्क्रीन पर बिट्स कैसे प्राप्त करें। इस प्रश्न का मूल कौन सा है। –

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