2012-03-09 22 views
11

जो मैंने पढ़ा है, ऐसा लगता है कि ओपनजीएल ईएस 2.0 ओपनजीएल 2.1 की तरह नहीं है, जो मैंने पहले से लिया था।ओपनजीएल ईएस 2.0 बनाम ओपनजीएल 3 - समानताएं और मतभेद

मुझे यह जानकर उत्सुकता है कि ओपनजीएल 3 ओपनजीएल ईएस 2.0 के बराबर है या नहीं। दूसरे शब्दों में, यह देखते हुए कि मैं डेस्कटॉप और एंड्रॉइड दोनों के लिए गेम इंजन बनाने जा रहा हूं, क्या इसमें कोई अंतर है जो मुझे ओपनजीएल 3.x + और ओपनजीएल ईएस 2.0 के बारे में विशेष रूप से अवगत होना चाहिए?

इसमें ओपनजीएल 4.x संस्करण भी शामिल हो सकते हैं।

उदाहरण के लिए, यदि मैं this पुस्तक पढ़ना शुरू करता हूं, तो क्या मैं अपना समय बर्बाद कर रहा हूं अगर मैं एंड्रॉइड को इंजन बंद करने की योजना बना रहा हूं (कोर्स के एनडीके का उपयोग करके))?

उत्तर

20

जो मैंने पढ़ा है, ऐसा लगता है कि ओपनजीएल ईएस 2.0 ओपनजीएल 2.1 की तरह कुछ नहीं है, जो मैंने पहले से लिया था।

परिभाषित करें "यह कुछ भी नहीं है"। डेस्कटॉप जीएल 2.1 में फंक्शंस का एक गुच्छा है जो ईएस 2.0 में नहीं है। लेकिन दोनों का सबसे आम सबसेट है जो दोनों पर काम करेगा (हालांकि आपको बनावट छवि लोडिंग के लिए चीजों को झुका देना होगा, क्योंकि वहां कुछ महत्वपूर्ण अंतर हैं)।

डेस्कटॉप जीएल 3.x बहुत सारी कार्यक्षमता प्रदान करता है जो अप्रत्याशित ES 2.0 बस नहीं करता है। फ्रेमबफर ऑब्जेक्ट्स 3.x में कोर हैं, जबकि वे 2.0 में एक्सटेंशन हैं (और फिर भी, आपको केवल एक गंतव्य एक्सटेंशन के बिना एक गंतव्य छवि मिलती है)। प्रतिक्रिया, पूर्णांक बनावट, वर्दी बफर वस्तुओं, और ज्यामिति शेडर्स बदल गया है। ये सभी विशिष्ट हार्डवेयर विशेषताएं हैं जो या तो ईएस 2.0 में उपलब्ध नहीं हैं, या केवल एक्सटेंशन के माध्यम से उपलब्ध हैं। जिनमें से कुछ प्लेटफॉर्म-विशिष्ट हो सकते हैं।

लेकिन डेस्कटॉप जीएल 3.x पर कुछ अच्छी एपीआई सुविधा सुविधाएं भी उपलब्ध हैं।); स्पष्ट विशेषता स्थानों (layout(location=#)), VAOs, आदि

उदाहरण के लिए, अगर मैं इस किताब को पढ़ना शुरू, मैं अपना समय अगर मैं बंदरगाह के लिए (बेशक NDK का प्रयोग करके) Android के लिए इंजन की योजना बर्बाद कर रहा हूँ?

यह इस बात पर निर्भर करता है कि आप कितना काम करना चाहते हैं और आप इसे काम करने के लिए क्या करने के लिए तैयार हैं। कम से कम, आपको ओपनजीएल ईएस 2.0 क्या करता है, इस पर पढ़ना चाहिए, ताकि आप यह जान सकें कि यह डेस्कटॉप जीएल से अलग कैसे है।

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

जिस चीज पर आपको पकड़ने की अधिक संभावना है, वह सुविधा डेस्कटॉप जीएल 3.x की विशेषताएं हैं। उदाहरण के लिए:

layout(location = 0) in vec4 position; 

यह ES 2.0 में संभव नहीं है। ऐसा ही एक परिभाषा होगा:

attribute vec4 position; 

कि ES 2.0 में काम करेगा, लेकिन यह नहींposition विशेषता कारण विशेषता सूचकांक 0 के साथ जुड़े होने हैं।कार्यक्रम से जुड़े होने से पहले glBindAttribLocation का उपयोग करके कोड के माध्यम से किया जाना है। डेस्कटॉप जीएल यह भी अनुमति देता है, लेकिन जिस पुस्तक से आपने लिंक किया है वह ऐसा नहीं करता है। स्पष्ट कारणों से (यह 3.3-आधारित पुस्तक है, कोई भी पुराने जीएल संस्करणों के साथ संगतता बनाए रखने की कोशिश नहीं कर रहा है)।

वर्दी बफर एक और है। पुस्तक उदार का उपयोग करती है, खासकर साझा परिप्रेक्ष्य matrices के लिए। यह इसके लिए एक सरल और प्रभावी तकनीक है। लेकिन ईएस 2.0 में यह सुविधा नहीं है; इसमें केवल प्रति-प्रोग्राम वर्दी है।

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

क्या यह आपके समय का कचरा होगा? खैर, यह पुस्तक आपको ओपनजीएल 3.3 एपीआई सिखाने के लिए नहीं है (यह ऐसा करती है, लेकिन यह बात नहीं है)। पुस्तक आपको ग्राफिक्स प्रोग्रामिंग सिखाती है; यह 3.3 एपीआई का उपयोग करने के लिए बस इतना होता है। आपके द्वारा सीखने वाले कौशल (हार्डवेयर आधारित हैं) को छोड़कर आप किसी भी एपीआई या सिस्टम में स्थानांतरण कर रहे हैं जिसमें शेडर्स शामिल हैं।

इसे इस तरह से रखें: यदि आपको ग्राफिक्स प्रोग्रामिंग बहुत कुछ नहीं पता है, तो इससे कोई फर्क नहीं पड़ता कि आप कौन सी एपीआई सीखने के लिए उपयोग करते हैं। एक बार जब आप अवधारणाओं को महारत हासिल कर लेते हैं, तो आप विभिन्न दस्तावेज पढ़ सकते हैं और समझ सकते हैं कि उन अवधारणाओं को किसी भी नए एपीआई को आसानी से कैसे लागू किया जाए।

+0

बिल्कुल सही - बस मुझे जो चाहिए था। धन्यवाद। :) – zeboidlund

+0

लेआउट क्वालीफायर वास्तव में ईएस 2.0 में उपलब्ध है। आपको अपने जीएलएसएल में "#extension GL_EXT_separate_shader_objects: सक्षम" निर्दिष्ट करने की आवश्यकता है और आप अभी भी "इन" के बजाय "विशेषता" का उपयोग करते हैं। –

+1

@ निकोलबोलस जो गलत है। यह स्पष्ट रूप से बताता है कि "ARB_explicit_attrib_location कार्यक्षमता पर भी कार्य करता है" – Speed

1

ओपनजीएल ईएस 2.0 (और 3.0) ज्यादातर डेस्कटॉप ओपनजीएल का सबसेट है।

ईएस में कोई विरासत निश्चित फ़ंक्शन पाइपलाइन नहीं है। निश्चित फ़ंक्शन पाइपलाइन क्या है? कुछ भी होने चर gl_Vertex की तरह निश्चित समारोह डेटा का उपयोग, gl_Normal, gl_Color, gl_MultiTexCoord, gl_FogCoord, gl_ModelViewMatrix और के किसी भी उपयोग के साथ glVertex, glColor, glNormal, glLight, glPushMatrix, glPopMatrix, glMatrixMode, आदि करने के लिए ... GLSL में फिक्स्ड फ़ंक्शन पाइपलाइन से कई अन्य मैट्रिस।

यदि आप इनमें से किसी भी सुविधा का उपयोग करते हैं तो आपके लिए कुछ काम खत्म हो जाएगा। ओपनजीएल ईएस 2.0 और 3.0 सिर्फ सादे शेडर्स हैं। आपके लिए कोई "3 डी" प्रदान नहीं किया गया है। आपको अपने प्रक्षेपण, प्रकाश व्यवस्था, बनावट संदर्भ इत्यादि लिखना होगा।

यदि आप पहले से ही ऐसा कर रहे हैं (जो कि सबसे आधुनिक गेम शायद करते हैं) तो आपके पास बहुत अधिक काम नहीं हो सकता है। यदि दूसरी ओर आप उन पुरानी बहिष्कृत ओपनजीएल सुविधाओं का उपयोग कर रहे हैं जो मेरे अनुभव से अभी भी बहुत आम हैं (अधिकांश ट्यूटोरियल अभी भी उस सामान का उपयोग करते हैं)। फिर आप के लिए कुछ काम मिल गया है क्योंकि आप अपने आप को उन सुविधाओं को पुन: उत्पन्न करने का प्रयास करते हैं।

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

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