2011-10-10 14 views
22

मुझे लगता है कि glVertexAttribPointer पॉइंट-टू सरणी के आधार पर वर्टेक्स विशेषता के लिए मान सेट करेगा। हालांकि, glVertexAttrib क्या है? ऐसा लगता है कि यह वर्टेक्स विशेषता के लिए केवल एक एकल (संभवतः वेक्टर) मान सेट करता है, तो जब आपके पास एकाधिक शिखर होते हैं तो क्या होता है? क्या सभी शीर्षकों को विशेषता के लिए समान मान देखने को समाप्त होता है?GlVertexAttrib (बनाम glVertexAttribPointer) के लिए क्या उपयोग किया जाता है?

उत्तर

40

यह मुख्य रूप से पुराने तत्काल मोड (glBegin/glEnd) के साथ उपयोग किया जाता था, जहां आप वर्टेक्स सरणी का उपयोग नहीं करते हैं, जिसे हटाया जाता है (और ओपनजीएल ईएस 2.0 और डेस्कटॉप ओपनजीएल 3+ कोर में हटा दिया जाता है)।

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

अगर आप जैसे के साथ एक सामान्य शेडर है उपयोगी है एक रंग विशेषता और एक स्थिति विशेषता है और आपके पास निरंतर रंग वाला ऑब्जेक्ट है। तो glVertexAttrib का उपयोग करके आपको न तो प्रत्येक चरम के लिए रंग जमा करना होगा, न ही आपको रंग के साथ एक विशेष शेडर का उपयोग करना होगा।

+2

एक रंग का उपयोग करना एक अच्छा उदाहरण है। धन्यवाद! –

+0

बहुत बढ़िया उत्तर :-) मैंने हमेशा खुद से पूछा, क्यों एक वर्दी के बजाय निरंतर विशेषता का उपयोग करेगा; लेकिन आपका उदाहरण मुझे पूरी तरह से समझ में आता है। – Mecki

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