2009-05-03 10 views
16

मुझे अपने ओपनजीएल ईएस 1.1 कोड (के बिना शेडर्स) में फ़ोटोशॉप ब्लेंडिंग मोड ("गुणा", "स्क्रीन" इत्यादि) की नकल करने की आवश्यकता है।शेडर्स के बिना ओपनजीएल ईएस के लिए फ़ोटोशॉप ब्लेंडिंग मोड

कैसे इस साथ HLSL करने के लिए पर कुछ डॉक्स हैं:

मैं कम से कम काम कर स्क्रीन मोड की जरूरत है।

क्या निश्चित पाइपलाइन पर कोई कार्यान्वयन है जो मैं देख सकता हूं?

+1

[यह] (http://www.pegtop.net/delphi/articles/blendmodes/) पृष्ठ में प्रत्येक मिश्रण मोड कैसे काम करता है (आरेखों के साथ) – bobobobo

उत्तर

15

अधिकांश फ़ोटोशॉप मिश्रण-मोड पोर्टर-डफ ब्लेंडमोड पर आधारित होते हैं।

इन्हें आवश्यक है कि आपकी सभी छवियां (बनावट, रेंडरबफर) पूर्ववर्ती रंग-स्थान में हों। यह आम तौर पर एक बनावट में संग्रहीत करने से पहले अल्फा-मूल्य के साथ सभी पिक्सेल-मानों को गुणा करके किया जाता है। जैसे एक पूर्ण पारदर्शी पिक्सेल गैर-प्रीम्प्लीप्लाइड कलर स्पेस में काला जैसा दिखता है। यदि आप इस रंग-स्थान से अपरिचित हैं, तो वेब पर इसके बारे में एक या दो घंटे पढ़ने के लिए व्यतीत करें। यह एक साफ और अच्छी अवधारणा है और फ़ोटोशॉप जैसी रचनाओं के लिए आवश्यक है।

वैसे भी - एक बार आप उस प्रारूप आप उपयोग कर स्क्रीन सक्षम कर सकते हैं में आपकी छवियों है:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_COLOR) 

पूर्ण गुणा मोड ओपन साथ संभव नहीं है | ES पाइपलाइन। आप केवल पूर्ण अपारदर्शी पिक्सल के साथ काम करते हैं तो आप कर सकते हैं नकली इसे प्रयोग:

glBlendFunc(GL_ZERO, GL_SRC_COLOR) 

पारदर्शी पिक्सेल के लिए या तो अपने बनावट में परिणाम और हालांकि आपके फ्रेमबफर गलत हो जाएगा।

1

शुरू करने के लिए आपका सबसे अच्छा स्थान Red Book की एक प्रतिलिपि लेने और सामग्रियों और मिश्रण मोड पर अध्यायों के माध्यम से पढ़ने के लिए है। यह 'क्लासिक' ओपनजीएल मिश्रण कार्यों के काम के बारे में एक बहुत ही व्यापक और स्पष्ट स्पष्टीकरण है।

10

आप इस प्रयास करना चाहिए:

glDepthFun(GL_LEQUAL);

सभी था:

glBlendFunc(GL_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA) 

यह मैं पाया है iPhone/ओपन पर मेरे लिए गुणा ES

+1

महान उत्तर के लिए धन्यवाद, बिल्कुल ठीक दिखता है फ़ोटोशॉप में गुणा करें (: –

+0

यह केवल तभी काम करता है जब छवि एक ठोस रंग (अपारदर्शी) हो। यदि आपके पास पारदर्शिता वाला कोई चित्र है तो आपको इसे एक सफेद पृष्ठभूमि के सामने रखना होगा और फिर इसे आज़माएं। – Peter

1

है कि इस का उपयोग कर की तरह लग रहा स्क्रीन प्रभाव प्राप्त करने की आवश्यकता है, कम से कम यह मेरे प्रोजेक्ट पर अच्छा काम करता है।

मुझे यकीन नहीं है कि यह क्यों काम करता है, लेकिन अगर कोई जानता है तो कृपया साझा करें।

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