2011-06-01 16 views
12

मैं ओपनजीएल का उपयोग कर प्रोग्राम लिख रहा हूं। हाल ही में, मैंने ओपनजीएल छायांकन भाषा सीखना शुरू कर दिया। मैं एक नौसिखिया हूँ; तो कृपया अपने उत्तरों में विस्तृत रहें।ओपनजीएल छायांकन भाषा परिवर्तनीय के विभिन्न प्रकार (क्वालीफायर)

मेरे प्रश्न हैं:

  1. GLSL में चर के विभिन्न प्रकार (क्वालीफायर) क्या हैं?
  2. उनके लिए क्या उपयोग किया जाता है?
  3. वे एक दूसरे से अलग कैसे हैं?

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

+1

आपके उत्तरों के लिए सभी को धन्यवाद। कुछ ऑनलाइन स्रोतों से, मुझे दो क्वालीफायर "इन" और "आउट" के बारे में जानकारी मिली, जिसका उपयोग वर्टेक्स - फ्रैगमेंट शेडर्स संचार के लिए भी किया जा सकता है। वे "भिन्न" क्वालीफायर के समान हैं। क्या वे क्वालीफायरों का एक अलग "वर्ग" हैं या "भिन्न" क्वालीफायर के लिए कुछ वैकल्पिक हैं? – Einiosaurus

उत्तर

21

ओपन में 3+:

  • varying
  • const अब मान्य नहीं है के लिए, ठीक है ... स्थिरांक है!
  • uniform (अधिकतम) प्रति ड्रा कॉल के लिए है महत्व देता
  • in पिछले पाइपलाइन चरण, ज्यादा से ज्यादा यानी प्रति शिखर (या प्रति टुकड़ा) मूल्यों से इनपुट के लिए है, आदिम प्रति glAttribDivisor और हार्डवेयर instanciation
  • का उपयोग कर यदि out अगले चरण
टुकड़ा shaders के लिए आउटपुट के बारे में

के उत्पादन के लिए है: OpenGL3 में और ऊपर, के अंतर्निहित टुकड़ा शेडर उत्पादन (जैसे gl_FragColor, gl_FragDepth के उल्लेखनीय अपवाद के साथ) के लिए चर पदावनत कर रहे हैं सबसे और प्रतिस्थापित किया जाना चाहिए उपयोगकर्ता द्वारा परिभाषित out चर के साथ।

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

सभी विवरण क्या तुमने कभी के बारे में दोनों GLSL ('सर्वर') पक्ष और ओपन चाहते सकता है ('ग्राहक') की ओर पाया जा सकता है:

    the OpenGL specification में
  • , विशेष रूप से पृष्ठों रंग के लिए 248-250 खंड शेडर्स पर बफर आउटपुट।
  • the GLSL specs, पेज 38 और शेडर आउटपुट के लिए।
+0

ग्रेट, बहुत बहुत धन्यवाद! सिर्फ एक छोटा सवाल, फ्रैगमेंट शेडर का अगला चरण क्या है? यदि आपका फ्रैगमेंट शेडर एक "आउट" चर परिभाषित करता है, जहां उस चर का मान पास हो जाता है? – Einiosaurus

+0

खंड के शेडर आउटपुट के मुद्दे को स्पष्ट करने के लिए मेरा जवाब संपादित किया! –

+0

"फ्रैगमेंट शेडर का अगला चरण क्या है?" -> 2011 में कोई भी नहीं, लेकिन सभी को बदसूरत glblendFunc के बजाय "मिश्रण शेडर्स" की उम्मीद है। संपादित करें: सटीक पृष्ठों के साथ चश्मा उद्धृत करने के लिए +1। – Calvin1602

2

चेक ट्यूटोरियल: http://www.lighthouse3d.com/tutorials/glsl-tutorial/

वहाँ वर्दी चर (स्थिर सभी थ्रेड के लिए)

विशेषता चर (प्रति-शिखर इंजेक्शन)

बदलती (जैसा कि आप जानते)

3
    हैं
  • वर्दी: लगातार डेटा प्रति ड्रॉ कॉल, आमतौर पर शेडर्स को पैरामीट्रिज़ करने के लिए उपयोग किया जाता है।
  • भिन्नता: प्रक्रिया में आदिम के साथ इंटरपोलिंग, वीएस और एफएस के बीच डेटा स्थानांतरित करता है।
  • विशेषता: यह वर्टेक्स विशेषता डेटा है, वर्टेक्स शेडर का इनपुट। यह आदिम में प्रत्येक चरम के लिए निर्दिष्ट है।
संबंधित मुद्दे