2012-12-23 15 views
12

मैं कुछ वेबजीएल सीखने की कोशिश कर रहा हूं (इस ट्यूटोरियल से http://learningwebgl.com/blog/?page_id=1217)। मैंने गाइड का पालन किया, और अब मैं अपना खुद का डेमो लागू करने की कोशिश कर रहा हूं। मैं एक ग्राफिक्स ऑब्जेक्ट बनाना चाहता हूं जिसमें प्रत्येक व्यक्तिगत ऑब्जेक्ट के दृश्य में दिखाई देने के लिए बफर और डेटा शामिल है। वर्तमान में, मेरे पास एक स्थिति वर्टेक्स बफर है, एक बनावट समन्वय बफर, और एक मानक बफर है। ट्यूटोरियल में, वह एक और बफर, एक सूचकांक बफर का उपयोग करता है, लेकिन केवल क्यूब्स के लिए। वास्तव में सूचकांक बफर क्या है? क्या मुझे इसे लागू करना चाहिए, और क्या यह क्यूब्स के अलावा किसी भी चीज़ के लिए उपयोगी है?वेबजीएल में इंडेक्स बफर?

उत्तर

6

आपकी ऑब्जेक्ट्स के वर्टिसेस को 3 डी समन्वय प्रणाली (euclidian coordinate system) में स्थितियों द्वारा परिभाषित किया गया है। इसलिए आप प्रत्येक दो निम्नलिखित शीर्षकों को ले सकते हैं और 0 डीद्वारा 2 डी रास्टर (स्क्रीन या कुछ लक्ष्य छवि) के लिए अनुमानित होने के बाद उन्हें सही लाइन से कनेक्ट कर सकते हैं। आपको wireframe कहा जाएगा।

cube wireframe

wireframe के समस्या यह है कि यह निश्चित नहीं है। यदि आप विशेष कोणों पर वायरफ्रेम घन को देखते हैं, तो आप यह नहीं कह सकते हैं कि घन वास्तव में कैसे घुमाया जाता है। ऐसा इसलिए है क्योंकि आपको निर्धारित करने के लिए visibility algorithms का उपयोग करने की आवश्यकता है, घन का कौन सा हिस्सा पर्यवेक्षकों की स्थिति (कैमरा की स्थिति) के करीब है।

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

तो आपके पास अब त्रिभुजों द्वारा परिभाषित घन है (इसलिए त्रिभुज जाल को कॉल करें)।

cube triangle mesh

लेकिन यह कैसे जो कोने रूपों त्रिकोण परिभाषित करने के लिए? इंडेक्स बफर द्वारा। इसमें वर्टेक्स बफर (आपके शिखर के साथ सूची) में इंडेक्स होता है और रास्टरराइजिंग एल्गोरिदम को बताता है जो तीन शिखर त्रिकोण बनाते हैं। बहुत सारे तरीके हैं, इंडेक्स बफर में इंडेक्स को समान वर्टिसेस की पुनरावृत्ति को कम करने के लिए कैसे करें (एक कशेरुका त्रिकोणों का हिस्सा हो सकता है), आप article about graphics primitives पर कुछ पा सकते हैं।

+0

स्पष्ट और विस्तृत स्पष्टीकरण के लिए धन्यवाद! मुझे इसकी ही खोज थी। – Sefu

4

तकनीकी रूप से आपको इंडेक्स बफर की आवश्यकता नहीं है। glDrawArrays और glDrawElements के साथ ज्यामिति प्रस्तुत करने के दो तरीके हैं। glDrawArrays इंडेक्स बफर का उपयोग नहीं करता है। आप बस बफर में दूसरे के बाद एक कोष्ठक लिखते हैं और फिर जीएल को बताते हैं कि तत्वों के साथ क्या करना है। यदि आप कॉल में मोड के रूप में GL_TRIANGLES का उपयोग करते हैं, तो आपको बफर में डेटा (चर, मानदंड, ...) के ट्रिपल रखना होगा, इसलिए जब एक कशेरुक का उपयोग कई बार किया जाता है तो आपको इसे बफर में कई बार जोड़ना होगा।

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

गोलाकारों के लिए glDrawElements पैरामीटर मिलान के रूप में बहुत समझ में आता है, लेकिन एक घन के लिए मानक अलग हैं, सामने के चेहरे को शीर्ष चेहरे की तुलना में एक अलग सामान्य की आवश्यकता होती है, लेकिन दो शीर्षकों की स्थिति समान होती है । आपको अभी भी स्थिति को दो बार बफर में रखना होगा। उस मामले के लिए glDrawArrays समझ में आ सकता है।

यह डेटा पर निर्भर करता है, जिसमें कॉल के लिए कम डेटा की आवश्यकता होती है, लेकिन glDrawElements अधिक लचीला है (क्योंकि आप हमेशा इंडेक्स बफर के साथ glDrawArrays अनुकरण कर सकते हैं जिसमें संख्या 0, 1,2, 3, 4, ...)।

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