2014-12-20 12 views
5

तो मैं "आधिकारिक ओपनजीएल गाइड" पढ़ रहा था और एक खंड में जहां उन्होंने भौतिक प्रकाश पढ़ाया था, उन्होंने अचानक टुकड़े टुकड़े में इनपुट चर के लिए "फ्लैट" क्वालीफायर का उपयोग किया। मैंने इस मामले को Google किया और मैं "फ्लैट छायांकन" और "चिकनी छायांकन" और उनके बीच के अंतर के साथ आया, जिसे मैं समझ नहीं पा रहा हूं कि यह एक साधारण "MatIndex" चर से कैसे संबंधित है।glsl में "फ्लैट" क्वालीफायर?

struct MaterialProperties { 
vec3 emission; 
vec3 ambient; 
vec3 diffuse; 
vec3 specular; 
float shininess; 
}; 
// a set of materials to select between, per shader invocation 
const int NumMaterials = 14; 
uniform MaterialProperties Material[NumMaterials]; 
flat in int MatIndex; // input material index from vertex shader 

क्या इस सब के बारे में है: यहाँ किताब से उदाहरण कोड है?

उत्तर

16

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

flat कीवर्ड का उपयोग करके, कोई इंटरपोलेशन नहीं किया जाता है, इसलिए उस विशेष आदिम के रास्टरराइजेशन के दौरान उत्पन्न प्रत्येक खंड समान डेटा प्राप्त करेगा। चूंकि प्राइमेटिव्स को आमतौर पर एक से अधिक वर्टेक्स द्वारा परिभाषित किया जाता है, इसका मतलब है कि उस मामले में केवल एक कशेरुका का डेटा उपयोग किया जाता है। इसे ओपनजीएल में provoking vertex कहा जाता है।

यह भी ध्यान रखें कि पूर्णांक प्रकार कभी भी अलग नहीं होते हैं। आप को किसी भी मामले में flat के रूप में घोषित करना होगा।

आपके विशिष्ट उदाहरण में, कोड का अर्थ है कि प्रत्येक आदिम में केवल एक सामग्री हो सकती है, जिसे प्रत्येक आदिम के उत्तेजक वर्टेक्स की सामग्री आईडी द्वारा परिभाषित किया जाता है।

+0

क्षमा करें लेकिन हमारे संदर्भ में "इंटरपोलेशन" का क्या अर्थ है? अंग्रेजी मेरी मूल भाषा नहीं है और जब मैं अपनी भाषा में अपना अनुवाद प्राप्त करने का प्रयास करता हूं तो मुझे "इंटरपोलैटिया" मिलता है, जो एक ही शब्द है। = [ – Pilpel

+3

@Pilpel: [इंटरपोलेशन] (https://en.wikipedia.org/wiki/Interpolation) एक सामान्य अवधारणा है जिसे आप ग्राफिक्स करना चाहते हैं जब आप खुद को परिचित करना चाहिए। इंटरपोलेशन के साथ, आमतौर पर डेटा बिंदुओं का एक सेट होता है और दिए गए डेटा बिंदुओं के बीच मूल्य उत्पन्न करने का प्रयास करता है। इस संदर्भ में, हमारे पास प्रति-चरणीय डेटा है और इसे प्रति टुकड़े को अलग करना है। रंग प्रति vertex के साथ एक त्रिकोण की कल्पना करो।वर्टेक्स ए के लिए, हम वर्टेक्स बी के लिए लाल निर्दिष्ट करते हैं, हम हरे रंग को निर्दिष्ट करते हैं और वर्टेक्स सी के लिए, हम नीले रंग को निर्दिष्ट करते हैं। इंटरपोलेशन पूरे त्रिकोण में चिकनी रंग ग्रेडियेंट उत्पन्न करेगा। – derhass

3

यह हिस्सा है कि गुण खंड शेडर के लिए कैसे इंटरपोल किया गया है, डिफ़ॉल्ट एक परिप्रेक्ष्य सही इंटरपोलेशन है।

GLSL spec section 4.5

में

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

इंटीग्रल गुण फ्लैट होने की जरूरत है योग्यता के रूप में एक ही बात का मतलब होगा के रूप में योग्य जा सकती है, योग्य हो सकता है।

आप धारा 13.4 में openGL spec तालिका 13.2 में उत्तेजक वर्टेक्स की तालिका पा सकते हैं।

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