2013-02-26 180 views
12

मैं वर्तमान में ओपन ES 2.0 दायरे में नया हूँ और, बफ़र्स, shaders, आदिओपनजीएल - सूचकांक के लिए GL_ELEMENT_ARRAY_BUFFER क्यों है?

फिलहाल, मैं तो बस के बीच मतभेदों को समझने की कोशिश कर रहा हूँ के रूप में मैं बंधन के बारे में कर सकते हैं के रूप में ज्यादा समझने के लिए चाहते हैं GL_ELEMENT_ARRAY_BUFFER और GL_ARRAY_BUFFER और प्रत्येक निर्दिष्ट प्रीसेट का उपयोग कब करें।

मेरे वर्तमान समझ मुझे विश्वास है कि GL_ELEMENT_ARRAY_BUFFER कहा त्रिकोण के लिए सूचकांक के लिए विशेष रूप से है, जबकि अन्य सब कुछ के लिए है।

किसी पर क्यों और अगर यह सही है विस्तृत कर सकते हैं? GL_ELEMENT_ARRAY_BUFFER को अलग तरीके से कैसे संभाला जाता है?

उत्तर

19

GL_ELEMENT_ARRAY_BUFFER का उपयोग आपके द्वारा पेश किए जा रहे बफर को "अन्य" (GL_ARRAY_BUFFER) बफर में प्रत्येक तत्व के सूचकांक को इंगित करने के लिए किया जाता है।

तो, कोने के साथ एक बहुत ही बुनियादी उदाहरण केवल (कोई अन्य डेटा) के रूप में, यदि आप एक सूचकांक बफर है:

{0, 1, 2} {0, 2, 3}

और डेटा बफर शामिल हैं:

{{0, 0, 0}, {1, 0, 0}, {1, 1, 0}, {0, 1, 0}}

फिर, जब आप glDrawElements को कॉल करते हैं, तो यह पहले त्रिकोण के लिए 0, 1 2, फिर 0, 2, 3 के लिए दूसरे (यानी मूल रूप से एक वर्ग) को चुनने के लिए जानता है।

यह अधिक उपयोगी हो जाता है जब आपके पास बहुत सारे जटिल मॉडलों & चेहरों के साथ अधिक जटिल मॉडल होते हैं - क्योंकि कई चेहर एक ही शिखर साझा करेंगे (इसलिए आपको उसी डेटा को "पुनः" करने की आवश्यकता नहीं है)।

नोट: ऊपर के उदाहरण केवल कोने से पता चलता - जैसा कि आप वहाँ में (शिखर रंग, Normals, बनावट निर्देशांक ... आदि) की तरह आप के रूप में ज्यादा डेटा बिछा कर सकते।

+0

यह समझ मैं जानना चाहता हूँ आ गए हैं। मेरे पास एकमात्र असली सवाल है कि बफर टैग में शब्द शब्द क्यों है? यही कारण है कि मुझे हर बार फेंकता है क्योंकि ... यह सिर्फ एक ARRAY है। मैं इसे एक मौलिक सरणी नहीं कहूंगा। – TheCodingArt

+1

व्यक्तिगत रूप से उस शब्द में "तत्व" शब्द का अर्थ है कि यह "तत्व" संदर्भों की एक सरणी है - क्योंकि डेटा बफर में मनमाना डेटा हो सकता है - लेकिन डेटा के प्रत्येक समूह (vertex + normal + color + tex coord) मूल रूप से हो सकता है एक "तत्व" कहा जाता है। – goatherder

+0

ठीक है, तत्व सरणी में तत्वों वाले सरणी का क्रम शामिल है ... यह एकमात्र तार्किक कारण है जिसे मैं सोच सकता हूं, जो मुझे कोई समझ नहीं आता है। GL_ARRAY_BUFFER को एलिमेंट बफर क्यों नहीं कहा जाता है यदि इसमें तत्व हैं? यही वह जगह है जहां मैं थोड़ा खो गया हूं। – TheCodingArt

10

यह ज्यादातर ऐतिहासिक कारणों से है। वापस जब कोई वीबीओ नहीं था, glVertexPointer और इसी तरह के साथ निर्दिष्ट पॉइंटर्स किसी भी प्रकार की ओपनजीएल ऑब्जेक्ट के साथ "संबद्ध" नहीं थे। जब वीबीओ को पेश किया गया तो यह व्यवहार वीबीओ के अर्थशास्त्र में चला गया, जिसके लिए सूचकांक और विशेषताओं के लिए एक अलग बफर लक्ष्य की आवश्यकता थी।

सामान्य शिखर की शुरूआत के साथ जिम्मेदार बताते तरह के एक संघ कार्यक्षमता जोड़ा गया है।

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