OpenGL संस्करण (ओं) को जानने और / या उपयोग करने के लिए?


16

इसलिए, मैं OpenGL के लिए नया हूं ... मुझे गेम प्रोग्रामिंग का सामान्य ज्ञान है लेकिन थोड़ा व्यावहारिक अनुभव है।

मैं विभिन्न लेखों और किताबों को देख रहा हूं और ओपनगेल में गोता लगाने की कोशिश कर रहा हूं, लेकिन मैंने विभिन्न संस्करणों और पुराने बनाम नए तरीके से गलत काम करने का तरीका ढूंढ लिया है।

मुझे लगता है कि मेरा पहला सवाल है कि क्या किसी को गेमर्स के प्रतिशत के बारे में कुछ आंकड़े पता हैं जो ओपनगेल के प्रत्येक संस्करण को चला सकते हैं। बाजार में हिस्सेदारी क्या है? 2.x, 3.x, 4.x ...

मैंने हॉफ लाइफ 2 के लिए आवश्यकताओं को देखा क्योंकि मुझे पता है कि वाल्व ने मैक पर चलने के लिए ओपनजीएल के साथ इसे अपडेट किया था और मुझे पता है कि वे आमतौर पर एक बहुत व्यापक उपयोगकर्ता-आधार को हिट करने की कोशिश करते हैं, और वे कहते हैं कि न्यूनतम GeForce 8 सीरीज। मैंने Nvidia की वेबसाइट पर 8800 GT को देखा और इसने OpenGL 2.1 के लिए समर्थन सूचीबद्ध किया। जो, शायद मैं गलत हूं, मेरे लिए प्राचीन लगता है क्योंकि पहले से ही 4.x है। मैंने 8800GT के लिए एक ड्राइवर को देखा और यह कहता है कि यह 4.2 का समर्थन करता है! वहाँ एक विसंगति का थोड़ा, योग्य।

मैंने ऐसी चीज़ें भी पढ़ी हैं जैसे XP केवल एक निश्चित संस्करण तक ही समर्थन करता है, या OS X केवल 3.2, या अन्य सभी प्रकार की चीज़ों का समर्थन करता है। कुल मिलाकर, मैं बस इस उलझन में हूं कि विभिन्न संस्करणों के लिए कितना समर्थन है और सीखने / उपयोग करने के लिए कौन सा संस्करण है।

मुझे सीखने के संसाधनों की भी तलाश है। इस प्रकार अब तक के मेरे खोज परिणामों ने मुझे ओपनजीएल सुपरबिल की ओर इशारा किया है। चौथे संस्करण में अमेज़ॅन पर महान समीक्षाएं हैं, लेकिन यह 2.1 सिखाता है। 5 वें संस्करण 3.3 सिखाता है और समीक्षाओं में कुछ चीजें हैं जो 4 वें संस्करण का उल्लेख करती हैं, बेहतर है और 5 वें संस्करण नई सुविधाओं या कुछ को ठीक से नहीं सिखाते हैं? असल में, सीखने की सामग्री के भीतर भी मैं विसंगतियों को देख रहा हूं और मुझे अभी यह भी नहीं पता है कि कहां से शुरू करना है।

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

बस एक साइड नोट, व्यक्तिगत रूप से, मुझे पता है कि मुझे अभी भी पहले से सीखने के लिए बहुत कुछ है, लेकिन मुझे टेसेलेशन में दिलचस्पी है; इसलिए मुझे लगता है कि इसमें कारक भी हैं, क्योंकि, जहां तक ​​मैं समझता हूं कि यह केवल 4.x में है?

[बस btw, मेरा डेस्कटॉप 4.2 का समर्थन करता है]


यह प्रश्न (स्टैक ओवरफ्लो पर) एक डुप्लिकेट प्रतीत होता है: stackoverflow.com/questions/6823371/…
एंडरसन ग्रीन

जवाबों:


21

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

http://store.steampowered.com/hwsurvey?platform=pc

दुर्भाग्य से, यह अभी टूटा हुआ प्रतीत होता है और यह वीडियोकार्ड के लिए कोई आँकड़े प्रदर्शित नहीं करता है। : \

मैंने भी XP जैसी चीजों को पढ़ा है जो केवल एक निश्चित संस्करण का समर्थन करता है

DirectX 9, OpenGL 2.1, DirectX 10 से OpenGL 3.0 और DirectX 11 से OpenGL 4.0 के बराबर है। यहीं से भ्रम की स्थिति पैदा होती है।

XP OpenGL के सभी संस्करणों का समर्थन करता है, लेकिन यह DirectX 10 या ऊपर का समर्थन नहीं करता है। यह कैसे Microsoft लोगों को Vista में अपग्रेड करने के लिए मजबूर करना चाहता था, लेकिन यह बहुत अच्छी तरह से काम नहीं करता था। ओपनजीएल एक खुला मानक है, इसलिए जब तक वीडिओकार्ड निर्माता XP के लिए ड्राइवरों का उत्पादन करने के लिए तैयार हैं, यह ओपनजीएल के नए संस्करणों का समर्थन करेगा।

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

यह OpenGL के लिए एक बहुत बड़ी समस्या है। मूल रूप से, पुराने दिनों में, आप "तत्काल मोड" का उपयोग करके वीडियोकार्ड में सामान भेजेंगे। के साथ शुरू करो glBegin, कुछ सामान करो, के साथ अंत glEnd। हालांकि, वीडियो कार्ड ड्राइवरों इस तरह नहीं है सब पर । वे कैसे जान सकते हैं कि आप कितना सामान भेजने जा रहे हैं? क्या यह स्किन वाले मॉडल के लिए टेक्सचर्ड क्वाड या 100,000 के लिए 4 वर्टिकल होने जा रहा है? यही कारण है कि उन्होंने वर्टेक्स बफर ऑब्जेक्ट (वीबीओ) पेश किया। जबकि तत्काल मोड एक लिंक्ड सूची है, एक वीबीओ एक स्थिर सरणी है। डेवलपर जानता है कि यह कितना बड़ा है, चालक जानता है कि यह कितना बड़ा है। हर कोई खुश है। तो ओपनजीएल मानक बोर्ड (क्रोनोस ग्रुप) ने ओपनजीएल 3.0 और उसके बाद के लिए तत्काल मोड को अपग्रेड करने का फैसला किया। हालांकि, यह समस्याग्रस्त है, जैसा कि मैं एक साधारण उदाहरण के साथ दिखाऊंगा।

मान लीजिए कि आप स्क्रैच से शुरू होकर एक टेक्सचर्ड क्वाड प्रदर्शित करना चाहते हैं।

OpenGL 2.1 में:

  • प्रक्षेपण मैट्रिक्स सेट करें और इसे अंदर डालें GL_PROJECTION
  • मॉडलव्यू मैट्रिक्स सेट करें और इसे अंदर डालें GL_MODELVIEW
  • एक छवि लोड करें और इसे GL_TEXTURE_2Dसंभाल में रखें।
  • अपने कोने के लिए पदों, बनावट निर्देशांक और रंगों को परिभाषित करें।
  • बनावट को बांधें।
  • glBegin... glVertex2f... glTexCoord2f... glEnd

OpenGL 3.0 में:

  • प्रक्षेपण और मॉडलव्यू के लिए एक मैट्रिक्स बनाएँ।
  • एक छवि लोड करें और इसे GL_TEXTURE_2Dसंभाल में रखें।
  • अपने वर्टिकल के लिए पोज़िशन, टेक्सचर कोऑर्डिनेट और कलर्स को परिभाषित करें और उन्हें वीबीओ में डालें।
  • एक वर्टेक्स ऐरे ऑब्जेक्ट (VAO) बनाएं और अपने VBO को संलग्न करें।
  • बनावट वाले क्वैड को आउटपुट करने के लिए एक shader लिखें और इसे shader प्रोग्राम में डालें।
  • वर्दी का उपयोग करके shader प्रोग्राम में मैट्रिसेस संलग्न करें।
  • बनावट को बांधें।
  • बनावट को shader प्रोग्राम में संलग्न करें।
  • glDrawArrays

तो पहले संस्करण में क्या गलत हो सकता है?

  • आपकी स्थितियां गलत हैं।
  • चारों ओर आपकी गलत वाइंडिंग गलत है।
  • आपकी बनावट ठीक से लोड नहीं होती है।
  • आपकी बनावट ठीक से बंधती नहीं है।
  • आपका प्रोजेक्शन मैट्रिक्स गलत है।
  • आपका मॉडलव्यू मैट्रिक्स गलत है।
  • आप सही कोने नहीं भेज रहे हैं।

और दूसरा संस्करण में, आप ऊपर के साथ समस्याएं हो सकती और :

  • आपके वीबीओ गलत हैं।
  • आपका VAO गलत है।
  • आपका shader गलत है।
  • आपकी बनावट को छायादार से बांधना गलत है।

उचित डिबग टूल के बिना, यह एक गंभीर समस्या बन जाती है। यही कारण है कि लोग कहते हैं कि आपको तत्काल मोड पर रहना चाहिए। सौभाग्य से, हमारे पास अब मुफ्त और उत्कृष्ट gDEBugger है, लेकिन यह एक जादू की गोली नहीं है।

आपके प्रश्न का उत्तर देने के लिए: यह आपके खेल पर निर्भर करता है। यदि आप एक व्यापक दर्शक (उदाहरण के लिए एक आकस्मिक खेल या 2 डी प्लेटफ़ॉर्मर) तक पहुंचना चाहते हैं, तो आपको 2.1 लक्ष्य करना चाहिए। यदि आप एक महाकाव्य अंतरिक्ष खेल बना रहे हैं जो छह वर्षीय हार्डवेयर पर वैसे भी चलने वाला नहीं है, तो 3.3 लक्ष्य करें। और अगर आपको भविष्य की अनुकूलता के लिए नवीनतम और सबसे बड़ी जरूरत है, तो लक्ष्य 4.0।


2
मुझे लगता है कि आप यहां VAO / VBO के खिलाफ कुछ पूर्वाग्रह दिखा रहे हैं। वास्तव में यदि आप एक बनावट वाला क्वाड खींचना चाहते हैं, तो आपके पास पहले से निर्मित शेड्स और टेक्सचर (प्रोग्राम स्टार्टअप के दौरान - कोई भी रनटाइम के दौरान कोई भी नहीं) के साथ एक पूर्ण VAO / VBO सेट होगा। नए तरीके से एक टेक्सचर्ड क्वाड को आकर्षित करना वास्तव में कॉल की एक मुट्ठी भर है - आमतौर पर यह प्रोग्राम इनिट में जटिलता को सामने रखता है जबकि पुराना तरीका रनटाइम के दौरान जटिलता को उजागर करता है।
मैक्सिमस मिनिमस

2
लेकिन इसका ठीक यही मतलब है: अब आपका बग आपके डेटा (वर्टेक्स डेटा और टेक्सचर ऑब्जेक्ट), आपके शेडर प्रोग्राम, आपके शेडर कोड, आपके मैट्रिसेस, आपके यूनिफॉर्म अपलोड या आपके VAO बाइंडिंग में हो सकता है। यदि आप कुछ भी नहीं से शुरू करते हैं , तो यह सबसिस्टम की बहुत सी जाँच है! और आपको बहुत अधिक राज्य का ध्यान रखना होगा।
नाइट ६६

1
ध्यान दें कि gremedy साइट से gDEBugger पुराना है। मैं यह मानकर छोड़ दिया गया कि उनके फोरम लंबे समय से बंद हैं। उपकरण को AMD द्वारा उठाया गया है: gDEBugger
MichaelHouse

2
"glBegin ... glVertex2f ... glTexCoord2f ... glEnd।" बस नहीं। glBegin, glVertex आदि कभी सही नहीं थे। glDrawArrays को OpenGL 1.1 (1997) में पेश किया गया था और इसे हमेशा GlBegin और End पर इस्तेमाल किया जाना चाहिए।
एपीआई-जानवर

9

हार्डवेयर संगतता के बारे में कुछ आँकड़ों के लिए आप स्टीम सर्वेक्षण देख सकते हैं: http://store.steampowered.com/hwsurvey/ हालाँकि यह DX10 और DX11 को सूचीबद्ध करता है, हार्डवेयर संगतता क्रमशः OpenGL 3 और OpenGL 4 के समान है। हालांकि ध्यान दें कि लोगों पर OpenGL ड्राइवर स्थापना स्थिति आमतौर पर DX से भी बदतर है।

Windows XP DX10 या DX11 का समर्थन नहीं करता है, लेकिन OpenGL 3 और 4 ठीक होना चाहिए, बशर्ते ड्राइवर ठीक हों। OSX OpenGL 3 (अधिकतम पर) का समर्थन करता है, लिनक्स पर आपको ATI / NVIDIA विक्रेता ड्राइवरों के साथ OpenGL 4 मिलता है (निश्चित रूप से केवल अगर हार्डवेयर इसका समर्थन करता है)।

फिर OpenGL के मोबाइल ES संस्करण भी हैं। वास्तव में मैं सुझाव दूंगा कि ओपनजीएल ईएस 2.0 में, क्योंकि यह छोटा है, इसलिए सीखना आसान है, लेकिन आपको आधुनिक प्रथाओं, अर्थात शेड्स और वीबीओ का उपयोग करने की भी आवश्यकता है। यह भी सबसे मोबाइल उपकरणों पर प्रयोग किया जाता है (ताकि आप मोबाइल गेम बनाने में जाना चाहते हैं) और भी WebGL मूल रूप से एक ही है, इसलिए आप वास्तव में वेब ब्राउज़र में अपने सभी सीखने को तेजी से विकास के लाभ के साथ कर सकते हैं। OpenGL ES 3.0 इस गर्मी के कारण है।

Tessellation एक OpenGL 4.0 फीचर है। आपको पहले अन्य प्रकार के शेड्स सीखना चाहिए, अकेले सभी मूल बातें बताएं, लेकिन मैं मानता हूं कि यह दिलचस्प है - वास्तव में मैंने इसके साथ थोड़ा परीक्षण लिखा है: http://blog.tapiov.net/post/15189341463/playing- साथ-ओपन-4-चौकोर


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