2011-07-27 21 views
10

मैं ओपनजीएल ईएस 2.0 में एक टुकड़े शेडर का उपयोग करके धुंध प्रभाव बनाना चाहता हूं। जिस एल्गोरिदम में मुझे रूचि है वह बस एक औसत धुंध है - मेरे आस-पास के सभी आसन्न पिक्सेल जोड़ें और सामान्यीकृत करने के लिए 9 तक विभाजित करें।एक शेडर के साथ धुंध फ़िल्टर बनाना - खंड के शेडर से आसन्न पिक्सल तक पहुंचें?

1) यह पहली, फ्रेमबफर को प्रस्तुत करने के लिए तो प्रतिपादन लक्ष्य स्विच मुझे आवश्यकता होती है:

हालांकि मैं 2 मुद्दे हैं? या

2) मान लीजिए कि मैं अपनी "स्रोत" छवि को बनावट 0 के रूप में धुंधला करने के लिए बाध्य करता हूं, और मैं अपने धुंधले बनावट को आउटपुट कर रहा हूं। मैं उन पिक्सल तक कैसे पहुंच सकता हूं जिनके साथ मैं वर्तमान में काम नहीं कर रहा हूं। ऊर्ध्वाधर शेडर ने मुझे पिक्सेल के लिए बुलाया है, लेकिन मुझे अपने आस-पास के पिक्सेल तक पहुंचने की ज़रूरत है। कैसे? और कैसे मैं जानता हूँ कि अगर मैं एक बढ़त मामले हूं

(स्क्रीन के किनारे पर सचमुच):

उत्तर

11

क्या मटीस कहा पर थोड़ा और विस्तार से चर्चा करते:

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

  2. आप विशेष टुकड़ा शेडर में वर्तमान पिक्सेल के निर्देशांक चर gl_FragCoord और इन बनावट के रूप में पहले से प्रदान की गई छवि और इसी तरह gl_FragCoord.x +/- 1 और gl_FragCoord.y +/- 1 पड़ोसियों के लिए युक्त बनावट में निर्देशांक का उपयोग करें। लेकिन मतिस की तरह, आपको क्रमशः चौड़ाई और ऊंचाई (छवि के) द्वारा इन मानों को भंग करने की आवश्यकता है, क्योंकि बनावट निर्देशांक [0,1] में हैं। बनावट के लिए रैपिंग मोड के रूप में GL_CLAMP_TO_EDGE का उपयोग करके, किनारे के मामलों को स्वचालित रूप से बनावट हार्डवेयर द्वारा नियंत्रित किया जाता है। तो किनारे पर आपको अभी भी 9 मान मिलते हैं, लेकिन केवल 6 विशिष्ट होते हैं (अन्य 3, वास्तव में छवि के बाहर वाले लोग, उनके पड़ोसियों के सिर्फ डुप्लिकेट होते हैं)।

1

1) हाँ, का उपयोग करते हुए (3 एक अधिक सुविधाजनक एक फजी पाले सेओढ़ लिया गिलास देख कलंक प्राप्त करने के लिए एल्गोरिथ्म है) एक एफबीओ जाने का रास्ता है।

2) गणित के साथ, यदि आप पिक्सेल (x, y) पर हैं, तो पड़ोसी (x + 1, y), (x, 1 + y), (x + 1, y + 1), (एक्स -1, वाई), आदि एज मामलों को बनावट के लपेटो मोड के साथ संभाला जाता है। ध्यान दें कि चूंकि GL_TEXTURE_2D सामान्यीकृत निर्देशांक का उपयोग करता है, ऑफसेट 1 नहीं है, लेकिन 1/चौड़ाई और बनावट की 1/ऊंचाई है।

+1

क्या आप अधिक विशिष्ट हो सकते हैं कि मैं उन पड़ोसियों को टुकड़े टुकड़े के भीतर से कैसे पहुंचा सकता हूं? – Nektarios

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