क्या आज OpenGL 2.1 सीखना बेकार है?


44

मैं 3D OpenGL / DirectX दुनिया के लिए नया हूं और मुझे पता चला कि OpenGL 4.1 और GLSL विनिर्देशन आज ही जारी किए गए थे।

मेरे एक दोस्त ने मुझे ओजीएल v2.1 के लिए रेड बुक दिया, लेकिन, जहाँ तक मैंने पढ़ा है, 3.x और 4.x 2.x से बहुत भिन्न हैं और बहुत सारी चीजें अभी अपदस्थ हैं।

क्या मैं 3 डी और सीजी की मूल बातें सीखना शुरू करने के लिए पुस्तक का उपयोग कर सकता हूं या नई प्रति ढूंढना बेहतर है?


10
मुझे ओपनजीएल / डायरेक्टएक्स के बारे में ज्यादा जानकारी नहीं है, लेकिन मुझे ऐसी मशीन पर गेम खेलने में मजा आता है जो एक साल से ज्यादा पुरानी हो। मुझे लगता है कि आपके जानने के पूर्व 3.x OpenGL मेरे गेमिंग आदतों के लिए फायदेमंद होगा। सिर्फ एक विचार।
सिमरूर

मुझे यह सवाल पसंद नहीं आया। क्या आप OpenGL 2.1 में गेम बना सकते हैं ? उत्तर: एक निश्चित हाँ । तब बेकार से आपका क्या मतलब है ? क्या आप किसी पुरानी किताब या आउटमोड्ड एपीआई से 3 डी की मूल बातें सीख सकते हैं? फिर से एक निश्चित हाँ । क्या इसे करने का सबसे अच्छा-सबसे अच्छा-बेस्सस्स्ट तरीका है? शायद नहीं
बोबोबोबो

जवाबों:


18

इस तरह से मैं हमेशा स्टीम हार्डवेयर सर्वे के लिए मुखिया हूं: http://store.steampowered.com/hwsurvey/ - आप देखेंगे कि DX10 / 11 क्लास सिस्टम का बाजार में प्रवेश लगभग 80% है; यह मोटे तौर पर GL3.3 या उससे अधिक के बराबर है। यह 80% विस्टा / 7 उपयोगकर्ताओं के लिए प्रतिबंधित है - XP के साथ एक DX10 / 11 GPU में जोड़ें और आप केवल 90% से अधिक की वृद्धि करते हैं।

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

इसके साथ, आपको इस तथ्य पर ध्यान देने की आवश्यकता है कि यदि आप आज शिपिंग के इरादे से सीखना शुरू कर रहे हैं, तो आप वहां पहुंचने से पहले कम से कम एक वर्ष की अवधि देख रहे हैं (जब तक कि हम बात नहीं कर रहे हैं वास्तव में तुच्छ / सरल मामलों के बारे में)। Gfx क्षमताओं के ऊपर की ओर बढ़ते रहने के साथ, हम तब तक GL3.3 + हार्डवेयर के 100% से अधिक वास्तविक होने की ओर देख रहे हैं।

उसके बाद में GL2.1 या उससे कम के साथ आप सीख रहे होंगे और एक भयानक पुराने बकवास का बहुत उपयोग कर रहे हैं, भले ही आप अपने आप को GL2.1 के shaders और VBOs सबसेट तक सीमित कर दें (downlevel GLSL संस्करण का उपयोग करने के लिए बुरा है , और स्ट्रीमिंग VBOs GL_ARB_map_buffer_range के बिना सभी अनुपयोगी हैं - GL3.3 + ने कई चीजों को संभालने के बहुत अच्छे (और अधिक प्रदर्शन करने वाले) तरीके पेश किए हैं, आप खिलाड़ी के हार्डवेयर का बेहतर उपयोग कर रहे होंगे (और वे इसके लिए आभारी होंगे उसके लिए) और आप एक एपीआई से लड़ने के बजाय उत्पादक कोड लिखने में अधिक समय बिताएंगे जो वास्तव में आपके साथ सहयोग नहीं करना चाहता है।

और फिर बेशक खूंखार ड्राइवर की स्थिति है। कठिन लेकिन सच्चा तथ्य यह है कि विंडोज पर जीएल ड्राइवर एक खेदजनक स्थिति में हैं - एनवी समर्थन चीजों को वे नहीं करना चाहिए, एएमडी को उन चीजों का समर्थन नहीं करना चाहिए, और इंटेल के साथ आपको वास्तव में खुद को जीएल कार्यक्षमता के लिए प्रतिबंधित करने की आवश्यकता है जिसके लिए वहाँ है डी 3 डी में एक समकक्ष। नए GL_VERSION की अधिक संभावना है कि आप ड्राइवर बग का सामना करेंगे, लेकिन GL3.3 के लिए चीजें अभी काफी स्थिर हैं।

इसलिए सारांश यह है कि किसी भी अन्य जानकारी (लक्षित श्रोताओं आदि) की अनुपस्थिति में, मैं GL3.3 को आधार रेखा के रूप में लक्षित करूंगा (संभवतः उच्च GL_VERSIONs से कार्यक्षमता में खींच रहा है जहां यह उपलब्ध है और जहां यह कोडबेस को बाधित नहीं करता है बहुत ज्यादा) जब तक कि किसी भी कम जाने के लिए एक बहुत ही विशिष्ट और निश्चित रूप से पहचाना जाने वाला कारण नहीं था (और मैं " लेकिन कुछ पुराने हार्डवेयर वाले लोगों के बारे में" का उपयोग करने के बजाय कुछ अस्पष्ट धारणा का उपयोग करना चाहता हूं )। बाद के मामले में मैं GL2.1 से नीचे नहीं जाऊंगा, और मैं तब भी 3.x कार्यक्षमता के रूप में खींचना चाहूंगा।


GL3.3 ~ = DX10 / 11 और स्टीम हार्डवेयर आँकड़े पर महान बिंदु।
नैट

बस इन आंकड़ों को अपडेट करने के लिए - DX10 / 11 GPU + Vista / 7 अब ~ 88% पर हैं, DX10 / 11 GPU + XP के लिए एक और 4.38% में जोड़ें और आप 90% से अधिक प्रवेश पर काफी आराम से देख रहे हैं। जब मैंने उस मूल पोस्ट को बनाया था, तब तक मेरी अपेक्षा बहुत तेजी से बढ़ रही है।
मैक्सिमस मिनिमस

"GL3.3 + ने कई चीजों को संभालने के बहुत अच्छे (और अधिक प्रदर्शन करने वाले) तरीके पेश किए हैं" - तुलना में 3.2 किराया कैसे है? मैक उपयोगकर्ताओं को अभी तक 3.3 नहीं मिलता है। मैं मान रहा हूँ कि यह लगभग समान है, लेकिन बहुत अधिक ग्रहण नहीं करना चाहता।
michael.bartnett

38

मैं 2.1 और 3. अभी भी हार्डवेयर और ड्राइवरों कि केवल ओपन 2.1 समर्थन की एक बहुत कुछ है के चौराहे के साथ चिपके हुए सुझाव है, लेकिन प्रथाओं द्वारा ओपन 3 कोर के लिए प्रोत्साहित कर रहे हैं बेहतर है। यह ट्यूटोरियल शुरू करने के लिए एक बहुत अच्छी जगह है (3 में अपग्रेड किए गए फीचर्स के बिना ओपनजीएल 2.0 सिखाता है)।


3
जो ग्रॉफ ट्यूटोरियल के लिए +1। वह आपको अध्याय 2 में पूरी पाइपलाइन के माध्यम से ले जाता है। और जिस "उपयोगिता" कोड को वह जोड़ता है वह सिर्फ दो कार्य है: एक फ़ाइल में पढ़ने के लिए (जीएलएसएल के लिए) और एक टीजीए छवियों को पढ़ने के लिए (और आप बस एक दूसरे का उपयोग कर सकते हैं) छवि पुस्तकालय या एक बार जब आप काम कर रहे उदाहरण प्राप्त कर लेते हैं तो अपना स्वयं का छवि लोडर लिखें)। बाकी सब कुछ समझाया गया है और ट्यूटोरियल का हिस्सा है।
michael.bartnett

18

मैं कहूंगा कि यह बेकार नहीं है।

क्यों? ठीक है, जबकि बाकी दुनिया OpenGL 3.x और 4.0 का समर्थन कर रही है, Mac OS X अभी भी केवल OpenGL 2.1 का समर्थन करता है। और, ओपनजीएल ईएस, जिसका उपयोग सबसे अधिक किया जाता है, यदि सभी नहीं, पोर्टेबल प्लेटफॉर्म, अभी भी सभी संस्करणों में व्यापक रूप से समर्थित है: 1.0, 1.1 और 2.0; जो क्रमशः OpenGL 1.4, 1.5 और 2.1 के लिए लगभग तुलनीय हैं।

इसलिए जब तक OpenGL ES 1.0 पूरी तरह से पृथ्वी के चेहरे से गायब नहीं हो जाता, तब तक OpenGL 2.x को जानना बेकार नहीं होगा ।

यह कहने के लिए नहीं है कि OpenGL 3.x या 4.0 का उपयोग करने वाले प्लेटफार्मों पर मूल्य नहीं है जो निश्चित रूप से इसका समर्थन करते हैं।

अपडेट: मैक ओएस एक्स लायन (10.7) के रिलीज के रूप में, मैक पर OpenGL 3.2 कोर प्रोफाइल अब समर्थित है। यह रिलीज़ API को सरल बनाने के लिए OpenGL 1.x के बड़े हिस्से को दर्शाती है। OS X (और लो-एंड इंटेल ग्राफिक्स) के पुराने संस्करणों के उपयोगकर्ता अभी भी OpenGL 2.0 और 2.1 तक सीमित हैं। OpenGL 2.x जानना अभी भी उपयोगी है, और कुछ समय के लिए ऐसा ही रहेगा।


हिम तेंदुआ OpenGL 3 के अधिकांश विस्तार का समर्थन करता है - यहां तक ​​कि ज्यामिति के शेड भी।
एक्सल गेनिंग

@Alex समर्थन "सबसे" एक्सटेंशन का मतलब कोर GL3 समर्थित नहीं है। और हम सिर्फ 3.x के बारे में बात कर रहे हैं
Matias Valdenegro

@ एक्सल गेनिंग: यह सिर्फ एक ही नहीं है। OpenGL 3.0+ की अधिकांश रोचक विशेषताएँ एक्सटेंशन के रूप में उपलब्ध नहीं हैं । बड़ी संख्या में मुख्य परिवर्तन हैं।
ग्रेफेड

12

mh01 के उत्तर में बहुत सारी मूल बातें शामिल हैं, इसलिए मैं कुछ अभिलेखन जोड़ने जा रहा हूँ।

OpenGL ES

चलिए ES 2.0 बनाम डेस्कटॉप GL 2.1 बनाम डेस्कटॉप GL 3.3 के बारे में बात करते हैं। इस चर्चा के उद्देश्य के लिए, "GL XY" शब्द डेस्कटॉप ओपनलॉग संस्करण XY को संदर्भित करेगा, जबकि "ES XY", OpenGL ES XY को संदर्भित करेगा।

संरचनात्मक रूप से , ES 2.0 में कोर GL 3.3 के साथ सामान्य से अधिक है जो GL 2.1 के साथ है। जीएल 3.3 और ईएस 2.0 दोनों शुद्ध-शैडर आधारित हैं। वे दोनों शुद्ध बफर-वस्तु आधारित हैं। आदि जीएल 2.1 में कई प्रदर्शन और कोडिंग जाल हैं जो एक जीएल 2.1 ऐप लिखना आसान बना देगा जो आसानी से ईएस 2.0 के लिए पोर्टेबल नहीं होगा।

हालाँकि, भाषा वाक्य रचना के संदर्भ में , GLSL ES 1.00 (ES 2.0 के लिए मैपिंग) GL 3.3 की तुलना में GL 2.1 की GLSL की तरह अधिक दिखता है। attributeऔर varyingकीवर्ड 3.3 कोर में मौजूद नहीं है; यह उपयोग करता है inऔर out, जो 2 से अधिक shader चरणों के साथ काम कर रहा है, जो बहुत अधिक सुसंगत और उचित है (यही कारण है कि ES 3.0 ने GL 3.3 सिंटैक्स को अपनाया)।

जीएल 3.3 से ईएस 2.0 में सीखी गई अवधारणाओं को मैप करना आसान है । इसलिए यदि आप ऐसा करने के लिए विभिन्न उपकरणों में से किसी के लिए जीएल 3.3 सीखते हैं, तो आप समझेंगे कि ईएस 2.0 दुनिया में कैसे काम करना है। आपको यह पता लगाना होगा कि सबसेट कहाँ है, निश्चित रूप से (यानी: जो चीजें जीएल 3.3 कर सकती हैं, वह ईएस 2.0 नहीं कर सकती), लेकिन अवधारणाएं समान हैं।

GLSL के सिंटैक्स को मैप करना, ताकि आप एक से दूसरे में शेड्स कॉपी कर सकें, थोड़ा कठिन है। लेकिन वास्तव में, यह सही जगह पर कुछ #defines है। इसके अलावा, GLSL 3.30 में कुछ ES संगतता विशेषताएं हैं, जैसे highpऔर इसके आगे (जो डेस्कटॉप GLSL में कुछ भी नहीं करते हैं)।

इसलिए आप GL 2.1 के बजाय GL 3.3 से सीखते समय ES 2.0 के लिए कुछ हासिल करते हैं।


8

उन खेलों के लिए, जिन्हें केवल नए संस्करणों में खुलने वाले OpenGL के बड़े बदलावों की आवश्यकता नहीं है, केवल 3.x + का उपयोग करके आप एक एनवीडिया 8 श्रृंखला और ऊपर की ओर सीमित करते हैं (निश्चित रूप से अन्य ग्राफिक्स विक्रेताओं पर जो आप देखना चाहते हैं)। इसलिए यदि आप 3.x + सुविधाओं का उपयोग नहीं कर रहे हैं, तो आप केवल एक कृत्रिम सीमा बना रहे हैं, जो पुराने लोगों को रोक रहा है, लेकिन आपके खेल को खेलने से बहुत शक्तिशाली, ग्राफिक्स कार्ड।

इस कारण से मैं अत्यधिक संगत उपसमुच्चय और नए संस्करणों को सीखने की सलाह दूंगा, फिर सबसे कम संस्करण को उठाकर आप अपने खेल को प्रभावी ढंग से आगे बढ़ा सकते हैं। आप ऐसा कर सकते हैं

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


4

मैं कहूंगा कि अपनी Red Book का उपयोग करके OpenGL को सीखना सुरक्षित है, बस उन चीज़ों को अनदेखा करें जो नए संस्करणों (जैसे glBegin (), glEnd () - VBO के बजाय का उपयोग करें) में चित्रित हैं। नए संस्करणों में अधिकांश कार्यक्षमता एक्सटेंशन के माध्यम से पहले से ही उपलब्ध थी।


4

मैं ज्यादातर थबस्च से सहमत हूँ। लेकिन मैं पदावनत एपीआई को पूरी तरह से नजरअंदाज नहीं करूंगा: वहां अभी भी बहुत सारे कोड हैं जो उनका उपयोग करता है। मैं उन्हें बहुत कम ध्यान देना होगा, यद्यपि। कोई बात नहीं, उदाहरण के लिए, glBegin () सीखने में, glEnd () अच्छी तरह से पर्याप्त है कि उनका उपयोग करके अपना कोड लिखें। लेकिन जब आप उन्हें देखते हैं, तो आपको उन्हें पहचानना चाहिए और उन्हें कुछ पता होना चाहिए कि वे क्या कर रहे हैं।

यह अभी भी कम से कम एक बार पूरी रेड बुक के माध्यम से पढ़ने लायक है, भले ही आप नमूना कोड का निर्माण न करें और ओपनजीएल 3.x में बंद सुविधाओं को कवर करने वाले अभ्यास करें।


3

संक्षिप्त उत्तर:

नहीं। OpenGL 2.1 सीखना एक अच्छा विचार है, आज भी, जब तक आप "अच्छे हिस्से" सीखते हैं।

लंबे उत्तर:

ओपनजीएल को अनिवार्य रूप से दो भागों में विभाजित किया जा सकता है: "अच्छे हिस्से" और "विरासत के कार्य"।

ईमानदारी से, मुझे विरासत के कार्यों ("निश्चित कार्य") को सीखने में अधिक लाभ नहीं दिखता है। हालाँकि, OpenGL 2.1 (अच्छे हिस्से) का एक बड़ा हिस्सा आज भी अपेक्षाकृत मामूली बदलावों के साथ उपलब्ध है।

जैसे, OpenGL 2.1 के कुछ हिस्सों को सीखना फायदेमंद हो सकता है। विशेष रूप से, OpenGL ES 2 इन दिनों बहुत लोकप्रिय है, और ES 2 अधिकतर (लेकिन बिल्कुल नहीं) OpenGL 2.1 का सबसेट है। स्मार्टफ़ोन में 3D प्रोग्रामिंग के लिए, OpenGL ES 2 एक आवश्यक है।

तो "अच्छा" क्या है? मूल रूप से OpenGL 3.x "मूल प्रोफ़ाइल" ("संगतता प्रोफ़ाइल" के विपरीत) और / या OpenGL ES 2 में है।

  • वर्टेक्स और टुकड़ा शेड्स: उन्हें जानें
  • बनावट: अभी भी अच्छा है।
  • मैट्रिक्स: यह जानना कि वे कैसे काम करते हैं लाभकारी है, लेकिन glLoadIdentityइस तरह के कार्य पुराने हैं और इससे बचा जाना चाहिए
  • प्रकाश: यह जानना कि कंप्यूटर ग्राफिक्स में प्रकाश को किस तरह से सिम्युलेट किया जा सकता है, उपयोगी है, लेकिन glLightfvअन्य निश्चित फ़ंक्शन प्रकाश कार्यों से बचा जाना चाहिए।
  • एरे बफ़र्स: अच्छा
  • glBegin, glVertex, glColor, glEnd: उन्हें करने से बचें। त्वरित प्रयोग के लिए अच्छा हो सकता है, लेकिन ऐसा करने के लिए अन्य बेहतर तरीके हैं।
  • प्रदर्शन सूचियाँ: बचें

प्रश्न जहां मैंने मूल रूप से इस उत्तर को पोस्ट किया था वह एक डुप्लिकेट निकला, इसलिए मैं इसे यहां दोहरा रहा हूं।


1

मैं नहीं मानता कि यह एक बुरा विचार है। OpenGL के सभी संस्करणों में बहुत सारी GL अवधारणाएँ फैली हुई हैं और अभी भी अंततः आपकी सहायता करेंगी। मेरे पास 10 साल पहले से कई ओपनजीएल किताबें हैं जो आज भी मदद करती हैं। मैं कहूंगा कि यदि आप OpenGL के लिए नए हैं और कुछ बेहतर किताबें हैं जो पुरानी हैं, तो आप बहुत कुछ सीखेंगे और कोड को अभी भी काम करना चाहिए। अधिकांश ओपनजीएल पिछड़े संगत हैं (मेरा मानना ​​है)।


1

मैं सलाह देता हूं कि आप पहले आधुनिक चीजें सीखें और जब तक आपको इसकी आवश्यकता न हो, तब तक विरासत का सामान मौजूद न हो।

आउट ऑफ़ डेट सामान कुछ मामलों में उपयोगी हो सकता है उदाहरण के लिए यदि आप केवल ओपन 5 या पुराने का समर्थन करने वाली किसी चीज़ के लिए प्रोग्राम करने का प्रयास कर रहे हैं (पुराने गंदे नेटबुक और पुराने MacOS सिस्टम पर पाया जा सकता है), OpenGL ES 1.x (पुराने iPhones) और एंड्रॉइड 1.6 से पहले), या ओपनजीएल एससी (द सैफ्टी क्रिटिकल सबसेट अगर आप जेट फाइटर पर डिस्प्ले प्रोग्रामिंग करते हैं)। उदाहरण के लिए Minecraft OpenGL 1.3 के खिलाफ बनाया गया है, इसलिए यह वास्तव में पुराने हार्डवेयर का समर्थन कर सकता है (लेकिन यहां तक ​​कि एक 'उन्नत' विकल्प भी है)।

यह तब भी उपयोगी हो सकता है जब आप केवल स्क्रीन पर पिक्सेल प्राप्त करना चाहते हैं और इसे 'सही' तरीके से करने की परवाह नहीं करते हैं।

यह उन कुछ विशेषताओं पर भरोसा करने के लिए उपयोगी है जो ओपन-डिफॉल्ट द्वारा करते हैं जैसे -1.0 से 1.0 व्यूपोर्ट सेट करना और बिना शेड के रेंडर करना सीखना। यह आपको 1 बार में सब कुछ करने के बिना सीखने की अनुमति देता है।

लेकिन इसके अलावा अगर संभव हो तो इसे छोड़ दिया जाना चाहिए।

मैं तुम्हें बाहर की जाँच मेरा उत्तर है सुझाव है कि यहाँ और यहाँ और अधिक में गहराई से जानकारी के लिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.