2009-10-15 14 views
6

में प्रोग्रामेटिक रूप से अल्फा को एक बनावट ऑब्जेक्ट फीका कैसे करें मैं 10 महीनों के लिए आईफोन पर ओपनजीएल ईएस 1.1 का उपयोग कर रहा हूं, और उस समय एक ऐसा आसान काम है जो मैं करने में असमर्थ हूं: प्रोग्रामेटिक रूप से एक बनावट वस्तु फीका। इसे सरल रखने के लिए: मैं कोड नियंत्रण के तहत अल्फा फीका कैसे कर सकता हूं, एक साधारण 2 डी त्रिभुज जिसमें बनावट (अल्फा के साथ) लागू होती है। जब मैं एक दृश्य पर है, तो मैं एक साधारण रंगीन पृष्ठभूमि नहीं, इसे अंदर/बाहर फीका करना चाहता हूं। अब तक मुझे एकमात्र तकनीक यह है कि इस पर बनावट की कई पूर्व-फीका प्रतियों के साथ एक बनावट बनाना है। (यक)ओपनजीएल ईएस 1.1 (आईफोन)

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

उत्तर

15

शायद मैं आपको सही नहीं कर रहा हूं, लेकिन मेरे लिए यह मामूली लगता है और मैं इसे अपने ऐप्स सफलतापूर्वक कर रहा हूं। जाने का रास्ता है:

  1. बनावट और सब कुछ आप की जरूरत
  2. सम्मिश्रण सक्षम सक्षम: glColor4f(r * a, g * a , b * a, a)
  3. अपने ज्यामिति आकर्षित: glEnable(GL_BLEND)
  4. एक मिश्रण मोड glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
  5. के साथ मिश्रण करने के लिए एक रंग सेट का चयन

मिश्रण समारोह porter-duff over के लिए preultiplied c का उपयोग कर है olors/बनावट। GL_TEXTURE_ENV_MODE को GL_MODULATE पर सेट किया जाना चाहिए, लेकिन यह डिफ़ॉल्ट है।

+0

धन्यवाद, मैं इस एक अलग बदलाव का उपयोग कर काम कर रहा है, धन्यवाद मिल गया है! साथ ही, जब मैंने "जीएल \ _SRC \ _ALPHA" के बजाय "जीएल \ _ONE" का उपयोग करने का प्रयास किया तो यह मेरे लिए फीका नहीं होगा। – PewterSoft

+1

यही कारण है कि मैंने स्पष्ट रूप से * premultiplied * रंग निर्दिष्ट किया। यह सामान्य तरीका है कि क्वार्ट्ज बिटमैप संदर्भों में रंगों को संभाला जाता है और इसलिए जीएल में लोड किए गए बनावट में। यदि आपके रंग nonpremultiplied हैं, तो आपके द्वारा निर्दिष्ट मिश्रण func अपेक्षित कार्य करता है (लक्ष्य अल्फा को छोड़कर, लेकिन यह आमतौर पर अप्रासंगिक है)। –

2

निकोलाई का समाधान सही है; एप्पल मंचों पर मैंने जो कहा वह अनदेखा करें। चूंकि बनावट पूर्व-गुणा हो जाती है, प्रति-वर्टेक्स रंग भी होना चाहिए। आप GL_SRC_ALPHA बजाय GL_ONE का उपयोग करना चाहिए, और ऐसा करते हैं: एप्पल देव मंचों पर कुछ मदद करने के लिए

 

            
 
  
             glColor4f(1., 1., 1., myDesiredAlpha);
            
  
glColor4f(myDesiredAlpha, myDesiredAlpha, myDesiredAlpha, myDesiredAlpha);