2012-04-29 16 views
11

का उपयोग कर कृपया स्पष्ट करने के लिए निम्न चित्रों पर विचार प्रभाव: enter image description hereउत्पादन रबड़ libgdx और OpenGL ES

शुरू में मैं जब तक स्क्रीन गुलाबी हो जाता है व्यक्तिगत छवियों के साथ पूरे स्क्रीन/चरण भरें। गुलाबी रंग का प्रत्येक ब्लॉब एक ​​व्यक्तिगत छवि अभिनेता है जिसे मैं मंच में जोड़ता हूं।

अब मैं टचडाउन विधि को इस तरह से कार्यान्वित करना चाहता हूं कि जब भी उपयोगकर्ता स्क्रीन को छूता है, तो वह उस छवि का एक हिस्सा मिटा देता है जहां स्पर्श घटना हुई थी। हालांकि, उस स्पर्श घटना को अन्य छवियों/कलाकारों/बनावट क्षेत्रों को प्रभावित नहीं करना चाहिए जो गुलाबी ब्लॉब कलाकारों के पीछे या ऊपर हैं। ओपनजीएल ईएस का उपयोग करके मुझे libgdx में इसे कैसे प्राप्त किया जाना चाहिए? कृपया इस बारे में मेरी मदद करें।

मुझे यह लिंक मिला जो एक TextureRegion को संशोधित करने के बारे में बताता है लेकिन मुझे नहीं पता कि मैं इस ब्लॉग में बताई गई तकनीक का उपयोग करके अपनी समस्या के समाधान को कैसे प्राप्त करने जा रहा हूं। Here is the link

+0

स्पर्श पर, आप होने के लिए पूरा छवि चाहते हैं बाहर आता है हो सकता है "मिट"? मिटाना मतलब सफेद मूल्यों को पिक्सेल में लिखना, या उन्हें पारदर्शी बनाना है? आप OpenGL ES 2 का उपयोग कर रहे हैं? libgdx इसका समर्थन करता प्रतीत होता है। –

+0

@StefanHanke सं। मैं उस छवि का केवल एक हिस्सा मिटाना चाहता हूं जहां स्पर्श घटना हुई थी। और मैं उन्हें सफेद रंग देने के बजाय पारदर्शी बनाना चाहता हूं ताकि पृष्ठभूमि दिखाई दे। – Rafay

+0

यदि आप जानते हैं कि कौन सा रंग मिटाया जा रहा है तो यह आसान हो सकता है .. – Ronnie

उत्तर

5

क्या आप एफबीओ और स्टैंसिल बफर का उपयोग कर सकते हैं?

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

यह लिंक http://www.opengl.org/archives/resources/faq/technical/rasterization.htm, खंड 14.050 आपको बताता है कि कैसे करने के लिए सेटअप एक स्टेंसिल बफर:

इस प्रकार आप ओपन राज्य की स्थापना कर सकते हैं:

glEnable(GL_STENCIL_TEST); 
glStencilFunc(GL_ALWAYS, 0x1, 0x1); 
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE); 

बाद चित्रण में ऐसा 1 बिट सेट हो जाएगा प्रत्येक पिक्सेल के लिए स्टैंसिल बफर प्रदान किया गया।

आप चीजों के साथ बेला के लिए तो अपने मास्किंग सही तरीके से (मास्क जहां स्पर्श किया था, नहीं जहां ऐसा नहीं किया।)

+0

तीन स्टैक्ड (एक्सवाईजेड) का विचार बिल्कुल वैसा ही है जो मैं चाहता हूं। अब जब आप यहां बफर पर चर्चा कर रहे हैं, तो ऑपरेशन पर्याप्त रूप से चिकनी हो जाएगा ताकि प्रतिपादन धागा को ध्यान देने योग्य जिटर बनाने के लिए न हो? चूंकि मैं ओपनजीएल ईएस के लिए अपेक्षाकृत नया हूं, मुझे नहीं पता कि बफर कैसे काम करते हैं, इसलिए मुझे पूरी तरह से स्क्रैच से चीजों को आजमाने की ज़रूरत होगी। बात यह है कि मुझे यह सुनिश्चित करना होगा कि यह दृष्टिकोण सबसे अच्छा है जो मैं यहां करना चाहता हूं। जहां तक ​​एफबीओ और स्टैंसिल बफर का संबंध है, हाँ, मैं उनका उपयोग कर सकता हूं लेकिन मुझे नहीं पता कि कैसे। फ्रेमवर्क के भीतर एफबीओ और स्टैंसिल बफर के लिए नीचे कुछ संदर्भ दिए गए हैं। – Rafay

+0

http://libgdx.l33tlabs.org/docs/api/com/badlogic/gdx/graphics/glutils/FrameBuffer.html http://libgdx.l33tlabs.org/docs/api/com/badlogic/gdx/ utils/BufferUtils.html http://www.badlogicgames.com/wordpress/?p=1923 मैं पहले से ही खोज कर रहा हूं कि बफर का उपयोग करके इसे कैसे किया जाए, जैसा आपने सुझाव दिया है। – Rafay

+1

अब जब मैं इसके बारे में थोड़ा और सोचता हूं, तो आपको वास्तव में तीन एफबीओ की आवश्यकता नहीं होती है, केवल एक स्टैंसिल बफर के साथ मिलान करने के लिए। मैंने प्रश्न को बेहतर बनाने के लिए संपादित किया है। इस उत्तर में एफबीओ प्रदर्शन http://stackoverflow.com/a/2203931/959304 के बारे में कुछ चीजें हैं, लेकिन मैं इसके काम तक प्रदर्शन को अनदेखा कर दूंगा, और यदि प्रदर्शन खराब हो जाता है, तो _then_ अतिरिक्त कोड-जटिलता का भुगतान करें जो आप चाहते हैं अनुकूलन करने के लिए। – Soup