2011-06-21 11 views
17

मेरे पास पास-थ्रू वर्टेक्स और खंड शेडर्स हैं।दोनों चरम और खंड शेडर्स में gl_Color और gl_FrontColor के बीच संबंध क्या है

शिखर शेडर

void main(void) 
{ 
    gl_TexCoord[0] = gl_MultiTexCoord0; 
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 
} 

टुकड़ा शेडर

void main(void) 
{ 
    gl_FragColor = gl_Color; 
} 

उन खाली प्रतिपादन उत्पादन (काला नहीं पृष्ठभूमि रंग glClearBuffer करता है की तरह)।

यदि मैं gl_frontColor को gl_Color पर सेट करने के लिए वर्टेक्स शेडर को संशोधित करता हूं तो यह बिना छूटे ओपनजीएल बफर प्रस्तुत करता है ... पास-थ्रू शेडर्स के अपेक्षित व्यवहार के साथ है।

void main(void) 
{ 
    gl_FrontColor = gl_Color; //Added line 
    gl_TexCoord[0] = gl_MultiTexCoord0; 
    gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 
} 

मैं उलझन में हूँ, कैसे शिखर शेडर में gl_FrontColor सेटिंग्स टुकड़ा एक में gl_Color का मूल्य बदल सकते हैं? मुझे क्या याद आ रहा है

उत्तर

32

gl_Color का मतलब विभिन्न स्थानों में अलग-अलग चीजें हैं।

वर्टेक्स शेडर में, gl_Color उपयोगकर्ता द्वारा पारित प्राथमिक प्रति-वर्टेक्स रंग विशेषता का प्रतिनिधित्व करता है। यह glColor* कॉल या सरणी डेटा glColorPointer द्वारा प्राप्त डेटा का उपयोग करके सेट किया गया है।

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

अक्सर त्रिभुज के विशेष चेहरे के आधार पर अलग-अलग प्रति-चरणीय आउटपुट मानों के लिए उपयोगी होता है। प्राथमिक रंग में एक सामने का रंग और एक बैक रंग होता है, जो सामने वाले चेहरे और बैक-फेस त्रिकोणों के रंग का प्रतिनिधित्व करता है। इनके लिए वर्टेक्स शेडर आउटपुट gl_FrontColor और gl_BackColor हैं।

यदि आप दो तरफा प्रतिपादन कर रहे हैं, तो आपको खंड के शेडर के gl_Color इनपुट के लिए इन दोनों मानों को सेट करने की आवश्यकता होगी। यदि आप केवल सामने वाले प्रतिपादन कर रहे हैं, तो आपको केवल gl_FrontColor सेट करने की आवश्यकता है।

+0

यह एक अच्छा स्पष्टीकरण है! – vrince

0

gl_Color वह रंग है जिसे आपने अपने स्रोत में लंबित रंगों में पारित किया है, इसलिए यह एक विशेषता है। gl_FrontColor (और बैककॉलर) भिन्नताएं हैं जो ग्राम_Cओलर को टुकड़े टुकड़े में सेट करते हैं, जो कि आप देखे जाने वाले आदिम के किनारे पर निर्भर करते हैं। तो यदि आप सामने देखते हैं तो gl_Color gl_FrontColor के बराबर होगा ...

+3

जिस तरह से पिक्सेल-शेडर्स डायरेक्टएक्स में हैं। ओपनजीएल उन्हें फ्रैगमेंटशैडर कहते हैं जो भी अधिक सटीक है। – Nobody

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