2012-01-04 20 views
36

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

तो ... वर्तमान में हमारे पास ओपनजीएल 4.2 आउट है, जैसा कि मैंने कहीं पढ़ा है, कहीं भी dx11 हार्डवेयर (इसका क्या मतलब है?) और 'साइड' पुस्तकालयों का सेट होना चाहिए, उदाहरण के लिए विंडो बनाएं।

सबसे आम GLUT है, जिसे मैं बेहद नफरत करता हूं। मुख्य कारणों में से एक फ़ंक्शन कॉल है, जो कि हम मुख्य लूप कैसे बनाते हैं, इस तरह स्वतंत्रता की अनुमति नहीं देता है। जैसा कि कुछ लोग कह रहे थे, यह खेल के लिए नहीं था।

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

और एसएफएमएल और एसडीएल (एसडीएल < एसएफएमएल आईएमओ) भी है, जबकि दोनों को कभी-कभी ओजीएल के साथ काम करने के लिए अजीब दृष्टिकोण की आवश्यकता होती है और कुछ मामलों में वास्तव में तेज।

और हमारे पास GLEW भी है, जो एक्सटेंशन लोडिंग उपयोगिता है ... प्रतीक्षा करें ... GLUT/GLFW पहले से ही एक एक्सटेंशन नहीं है? क्या इसका उपयोग करने का कोई कारण है, जैसे कि रुचि रखने के लिए कोई वास्तव में महत्वपूर्ण एक्सटेंशन हैं?

अभी तक हमारे पास विंडो निर्माण (और कुछ उपयोगिताएं) हैं, लेकिन ... ओजीएल बनावट बनावट, न तो 3 डी मॉडल का ख्याल रखता है। मुझे कितने अन्य libs की आवश्यकता है?

आइए अब शिक्षा का हिस्सा लें। प्रसिद्ध नेहे ट्यूटोरियल में (इन) है। अत्यंत अस्पष्ट कोड और पुराने समाधान के साथ, WinApi के उपयोग के साथ सी में लिखा गया है, फिर भी अभी भी सबसे लोकप्रिय है। रेड बुक जैसी कुछ चीज़ें पाई जा सकती हैं, जो कि 2.x या 3.x जैसे संस्करणों से संबंधित हैं, हालांकि 4.x का उल्लेख करने वाले कुछ कम (और अधूरा) ट्यूटोरियल हैं।

क्या साथ जाना है?

+4

आपका "प्रश्न" बहुत ही फोकस और उलझन में है, कई चीजों का हवाला देते हुए जो सत्य नहीं हैं या चीजें कैसे काम करती हैं, इसकी गलतफहमी हैं। क्या आप यह स्पष्ट करने की कोशिश कर सकते हैं कि आप क्या हासिल कर रहे हैं और आपको क्या पता लगाना है? –

+6

मैंने लिखा है कि मैं "यह सुनिश्चित करना चाहता हूं कि कुछ चीजों पर मेरी वास्तविक समझ मान्य है" – Neomex

+0

"जीएलयूटी/जीएलएफडब्ल्यू पहले से ही एक एक्सटेंशन नहीं है?" - नही, वे नही हैं। जीएलयूटी एक स्वतंत्र पुस्तकालय है, जैसा कि जीएलएफडब्ल्यू है। एक्सटेंशन सिस्टम के ओपनजीएल कार्यान्वयन का हिस्सा हैं, कुछ लाइब्रेरी नहीं। GLEW एक्सटेंशन तक आसान पहुंच के लिए एक लाइब्रेरी है। – datenwolf

उत्तर

19

यदि आप कोई गेम लिख रहे हैं, तो मैं GLUT जैसी चीजों से बचूंगा, और अपने स्वयं के रैपर लिखूंगा जो आपके गेम प्रतिपादन आर्किटेक्चर के लिए सबसे अधिक समझदारी बनाएंगे।

मैं इस बिंदु पर ओपनजीएल 4.2 से भी बचूंगा, जब तक कि आप केवल विशिष्ट प्लेटफॉर्म पर विशिष्ट हार्डवेयर को लक्षित नहीं करना चाहते हैं, क्योंकि समर्थन न्यूनतम है। यानी, मैक ओएसएक्स शेर के नवीनतम संस्करण ने ओपनजीएल 3.2 के लिए समर्थन जोड़ा।

पिछले कुछ वर्षों में बनाई गई मशीनों के सबसे व्यापक कवरेज के लिए, ओपनजीएल 2.1 के आसपास अपना ढांचा बनाएं और नई ओपनजीएल सुविधाओं के लिए अतिरिक्त समर्थन जोड़ें जहां वे समझ में आते हैं। समग्र डिजाइन एक जैसा होना चाहिए। यदि आप केवल "वर्तमान" मशीनों को लक्षित करने में रुचि रखते हैं, यानी 2011 के अंत से मशीनें और आगे, ओपनजीएल 3 के आसपास अपना ढांचा बनाएं। केवल नवीनतम हार्डवेयर 4.2 का समर्थन करता है, और केवल विंडोज और कुछ लिनक्स पर। यदि आप मोबाइल डिवाइस और कंसोल को लक्षित करने में रुचि रखते हैं, तो OpenGL ES 2.0 का उपयोग करें।

GLEW OpenGL Extensions लोड करता है और प्रबंधित करता है, जो विभिन्न विक्रेताओं से हार्डवेयर एक्सटेंशन हैं, जीएलयूटी के विपरीत जो ओपनजीएल अनुप्रयोगों के निर्माण के लिए टूलकिट है, पूरी तरह से अलग चीजें हैं। मैं अत्यधिक GLEW का उपयोग करने की अनुशंसा करता हूं, क्योंकि यह निर्धारित करने के लिए एक क्लीन मैकेनिज्म प्रदान करेगा कि हार्डवेयर पर कौन सी सुविधाएं उपलब्ध हैं, और आपको उचित फ़ंक्शंस में फ़ंक्शन पॉइंटर्स मैन्युअल रूप से असाइन करने के कार्य से मुक्त कर देगा।

OpenGL SuperBible एक बहुत अच्छी किताब है, OpenGL Shading Language भी देखें। आधुनिक ओपनजीएल के साथ जो कुछ भी आप करते हैं वह शेडर्स के उपयोग को शामिल करने जा रहा है - कोई और निश्चित कार्यक्षमता नहीं - इसलिए आपकी सबसे बड़ी चुनौती जीएलएसएल को समझने जा रही है और शेडर पाइपलाइन कैसे काम करती है।

+1

+1 अंत में, किसी ने सुपरबाइबल का उल्लेख किया है! मैंने देखा आधुनिक ओपनजीएल का सबसे अच्छा परिचय। – cmannett85

6

मैं वर्तमान में आधुनिक ओपनजीएल सीख रहा हूं। मुझे अच्छे संसाधनों को खोजने में भी मुश्किल समय है, लेकिन यहां तक ​​कि मैंने अभी तक जो खोजा है।

मैंने एक अच्छी किताब की खोज की और OpenGL ES 2.0 Programming Guide के साथ समाप्त हुआ, जो मुझे लगता है कि अभी आधुनिक ओपनजीएल सीखने का सबसे अच्छा विकल्प है। हां, पुस्तक ओपनजीएल ईएस के बारे में है, लेकिन आपको डराए मत। ओपनजीएल ईएस 2.0 के बारे में अच्छी बात यह है कि एपीआई के सभी धीमे हिस्सों को हटा दिया गया है, इसलिए आपको इसे सीखने से कोई बुरी आदत नहीं मिलती है, जबकि यह अभी भी डेस्कटॉप ओपनजीएल के बहुत करीब है, अन्यथा कुछ ही फीचर्स गायब हैं, जो मैं लगता है कि आप OpenGL ES 2.0 को महारत हासिल करने के बाद आसानी से सीख सकते हैं।

दूसरी तरफ, आपके पास विंडोिंग लाइब्रेरी आदि के साथ गड़बड़ नहीं है जो आपके पास डेस्कटॉप ओपनजीएल के साथ है और इसलिए ओपनजीएल ईएस पर पुस्तक आपको वहां मदद नहीं करेगी। मुझे लगता है कि यह बहुत ही व्यक्तिपरक है जो पुस्तकालयों का उपयोग करने के लिए है, लेकिन अब तक मैंने एसडीएल, ImageMagick और Open Asset Import Library के साथ ठीक काम किया है।

अब, पुस्तक एक अच्छी मदद मिली है, लेकिन इसके अलावा, आधुनिक ओपनजीएल को ग्राउंड अप से OpenGL development on Linux पर ट्यूटोरियल का एक अच्छा संग्रह भी है। (मुझे लगता है कि यह अन्य ओएस नाम पर भी मान्य है।) पुस्तक, ट्यूटोरियल और एक नज़र या दो अब और फिर Orange Book पर आधुनिक ओपनजीएल की मूल बातें समझने में पर्याप्त हैं। ध्यान दें कि मैं अभी भी क्षेत्र में एक मास्टर नहीं हूं, लेकिन यह निश्चित रूप से मुझे शुरू कर दिया है।

+0

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

3

मैं मानता हूं कि इन दिनों ओपनजीएल में आने के लिए कड़ी मेहनत का राजा है जब सभी ट्यूटोरियल और उदाहरण पुरानी परियोजना फाइलों, बोकेन लिंक इत्यादि का उपयोग करते हैं, और यदि आप मदद मांगते हैं तो आपको बस उन पुराने ट्यूटोरियल्स को निर्देशित किया जाता है।

मैं वास्तव में पहले नेहे ट्यूटोरियल के साथ उलझन में था, लेकिन जब मुझे सी की थोड़ा बेहतर समझ मिली, यूनिक्स और अन्य मूलभूत सामानों पर पुस्तकालयों को संकलित करना, यह सब जगह में गिर गया।

जहाँ तक बनावट लोड हो रहा है के रूप में, मैं मिट्टी की सिफारिश कर सकते हैं: http://www.lonesock.net/soil.html

मुझे यकीन है कि नहीं कर रहा हूँ, लेकिन मुझे याद है मैं मुसीबत था इसे सही ढंग से संकलन है, लेकिन उस समय मेरे कम अनुभव हो सकता है। यदि आप परेशानी में भागते हैं तो मुझे चिल्लाओ!

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

मैं जीएलयूटी से पहले जीएलएफडब्ल्यू भी पसंद करता हूं, मुख्य रूप से क्योंकि जीएलयूटी सक्रिय रूप से बनाए रखा नहीं जाता है।

शुभकामनाएं!

+0

फ्रीजीएलयूटी अभी भी काम कर रहा है। इस बिंदु पर किसी को भी पुराने जीएलयूटी का उपयोग नहीं करना चाहिए, क्योंकि फ्रीजीएलयूटी इसके साथ संगत है। –

+1

मैंने कोशिश नहीं की है लेकिन यदि आप GLUT के लिए उपयोग किया जाता है तो यह एक अच्छा विकल्प की तरह लगता है। मैं हालांकि जीएलएफडब्ल्यू के सिंटैक्स को पसंद करता हूं :) – oskob

+0

मैं एसआरबीबी फ्रेमबफर बनाने में सक्षम होना पसंद करता हूं, जो फ्रीजीएलयूटी कुछ कारणों से जीएलएफडब्लू नहीं कर सकता है। यह मेरे लिए एक सौदा-ब्रेकर है; मैं एक गैर रेखीय रंगस्थान में काम करने से इनकार करता हूं। –

37

तो ... वर्तमान में हम ओपन 4.2 बाहर है, जो के रूप में मैंने पढ़ा कहीं DX11 हार्डवेयर की आवश्यकता है (यह क्या मतलब है?) और 'पक्ष' पुस्तकालयों की स्थापना की, उदाहरण के लिए विंडो बनाने की है।

DX11 हार्डवेयर ... हार्डवेयर है जो बॉक्स के किनारे लिखे गए "डायरेक्टएक्स 11 का समर्थन करता है" हार्डवेयर है। मुझे यकीन नहीं है कि आप यहां क्या पूछ रहे हैं; क्या आप स्पष्ट हैं कि डायरेक्ट 3 डी क्या है, डी 3 डी 11 क्या है, या डी 3 डी 11 को पूर्व संस्करणों से अलग करता है?

एफवाईआई: डी 3 डी प्रतिपादन हार्डवेयर तक पहुंचने के लिए ओपनजीएल का उपयोग करने का एकमात्र विकल्प है। संस्करण 11 एपीआई का सबसे हालिया संस्करण है। और डी 3 डी 11 डी 3 डी 10 की तुलना में कुछ नई चीजें जोड़ता है, लेकिन शुरुआत करने वाले को कुछ भी नहीं चाहिए।

ओपनजीएल एक विनिर्देश है जो ग्राफिक्स परिचालनों के लिए एक निश्चित इंटरफ़ेस का वर्णन करता है। यह इंटरफ़ेस बनाया गया है ओपनजीएल का हिस्सा नहीं है। इसलिए, ओपनजीएल संदर्भ बनाने के लिए प्रत्येक प्लेटफ़ॉर्म का अपना तरीका होता है। विंडोज़ WGL के साथ Win32 API का उपयोग करता है। एक्स-विंडोज एक्सएल विंडोज एपीआई का उपयोग जीएलएक्स कार्यों के साथ करता है। इत्यादि।

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

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

और हमारे पास GLEW भी है, जो एक्सटेंशन लोडिंग उपयोगिता है ... प्रतीक्षा करें ... GLUT/GLFW पहले से ही एक एक्सटेंशन नहीं है? क्या इसका उपयोग करने का कोई कारण है, जैसे कि रुचि रखने के लिए कोई वास्तव में महत्वपूर्ण एक्सटेंशन हैं?

यह एक और गलतफहमी है। GLUT एक लाइब्रेरी है, विस्तार नहीं है। एक ओपनजीएल एक्सटेंशन ओपनजीएल का हिस्सा है। देखें, ओपनजीएल सिर्फ एक विनिर्देश है, एक दस्तावेज़। ओपनजीएल का कार्यान्वयन जिसे आप वर्तमान में ओपनजीएल ग्राफिक्स सिस्टम लागू कर रहे हैं, लेकिन यह उस ग्राफिक्स सिस्टम में कई एक्सटेंशन भी कार्यान्वित कर सकता है।

जीएलयूटी ओपनजीएल का हिस्सा नहीं है; यह सिर्फ एक पुस्तकालय है। जीएलयूटी का काम ओपनजीएल विंडो बनाने और प्रबंधित करना है। GLEW भी एक लाइब्रेरी है, जिसका उपयोग loading OpenGL functions के लिए किया जाता है। यह एकमात्र विकल्प नहीं है, लेकिन यह एक लोकप्रिय है।

अभी तक हमारे पास विंडो निर्माण (और कुछ उपयोगिताएं) हैं, लेकिन ... ओजीएल बनावट बनावट, न तो 3 डी मॉडल का ख्याल रखता है। मुझे कितने अन्य libs की आवश्यकता है?

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

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

प्रसिद्ध नेहे ट्यूटोरियल (में) है। अत्यंत अस्पष्ट कोड और पुराने समाधान के साथ, WinApi के उपयोग के साथ सी में लिखा गया है, फिर भी अभी भी सबसे लोकप्रिय है। रेड बुक जैसी कुछ चीज़ें पाई जा सकती हैं, जो कि 2.x या 3.x जैसे संस्करणों से संबंधित हैं, हालांकि 4.x का उल्लेख करने वाले कुछ कम (और अधूरा) ट्यूटोरियल हैं।

क्या साथ जाना है?

ओपनजीएल विकी learning OpenGL stuff, पुराने स्कूल और अधिक आधुनिक दोनों के लिए ऑनलाइन सामग्री की एक सूची बनाए रखता है।

चेतावनी: लापरवाह स्व-संवर्धन अनुयायियों!

My tutorials on learning graphics बहुत से अनुभागों के साथ बहुत अच्छे हैं और अभी भी सक्रिय रूप से काम कर रहे हैं। यह किसी ओपनजीएल 4.x-विशिष्ट कार्यक्षमता को नहीं सिखाता है, लेकिन ओपनजीएल 3.3 4.2 के साथ पूरी तरह से संगत है। वे सभी कार्यक्रम 4.x हार्डवेयर पर ठीक चलेंगे।

I also maintain an unofficial SDK for OpenGL. यह उपयोगी उपयोगिताओं का एक बंडल है, जो सभी को सरल, एकीकृत बिल्ड सिस्टम द्वारा बनाया गया है। यह भी उचित रूप से अच्छी तरह से प्रलेखित है।

+9

+1, महान सामान! – oskob

+1

निश्चित रूप से ट्यूटोरियल – Grimmy

+2

के लिए एक +1 आपके ट्यूटोरियल के लिए बहुत बहुत धन्यवाद। – Shoe

2

आधुनिक ओपन के प्रमुख बिंदु tesselation और शेडर कार्यक्रमों के नए प्रकार है तो मैं ओपन 4 tesselation पर स्टैंडअलोन ट्यूटोरियल, यानी से शुरू करने के लिए सिफारिश करने के लिए करना चाहते हैं: http://prideout.net/blog/?p=48

मैनुअल के बाद और एक अच्छा अनुवर्ती ट्यूटोरियल अप "ओपनजीएल 3/4" के शीर्ष पर आधारित ओपन-सोर्स इंजनों पर एक नज़र डालना है। डेवलपर्स में से एक के रूप में, मैं Linderdaum Engine पर इंगित करता हूं।

-1

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

क्यूटी और ओपनजीएल के लिए एक संक्षिप्त परिचय के लिए my post here देखें।

मैं उल्लेख करता हूं कि चूंकि आप क्यूटी रैपर का उपयोग करने की कोशिश कर रहे हैं, तो क्यूटी कुछ ओपनजीएल कोड को सार तत्वित करता है, इसलिए एपीआई ओपनजीएल (हालांकि तर्कसंगत रूप से सरल) से थोड़ा अलग है।

अच्छे ट्यूटोरियल या पुस्तक के लिए मेरे वोट के लिए Anton's OpenGL tutorials और स्विफ्टलेस ट्यूटोरियल देखें। अमेज़ॅन पर एंटोन की ईबुक को अब तक किसी भी अन्य ओपनजीएल प्रकाशित संसाधन से अधिक रेट किया गया है जिसे मैंने अब तक देखा है (और बहुत सस्ता)।

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