2 डी गेम के लिए ओपनजीएल उपयुक्त है?


44

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

क्या यह एक अच्छी योजना है, या OpenGL को विशेष रूप से 3D के लिए बनाया गया है?



मुझे लगता है कि 2D के लिए OpenGL का उपयोग करने से एक लाभ यह है कि आपको shaders का लाभ मिलता है। ये विशेष प्रभाव प्राप्त करने के लिए उपयोगी हो सकते हैं। एक और लाभ यह है कि यदि आप पहले से ही ओपनजीएल को जानते हैं, तो आप पहले से ही एपीआई से परिचित होंगे।
लाइसोल

जवाबों:


44

OpenGL 2D गेम्स के लिए काफी उपयुक्त है। हालांकि यह आम तौर पर 3 डी के लिए उपयोग किया जाता है, वही कार्यक्षमता 2 डी गेम के लिए उपयोग की जा सकती है। यह कहना है, 3 डी OpenGL के साथ आप कुछ भी कर सकते हैं "2D" OpenGL के साथ लागू होगा।

इस स्थान पर कुछ और जानकारी मिल सकती है ।

2D OpenGL उसी तरीके से प्राप्त किया जाता है जैसे 3D OpenGL होता है। 2D OpenGL केवल एक तकनीक का अनुप्रयोग है, जो एक समतल विमान पर दृश्य का प्रतिपादन करता है, फिर एक परिप्रेक्ष्य प्रक्षेपण के बजाय ऑर्थोग्राफ़िक प्रक्षेपण का उपयोग करता है, जो आपके सेटअप के आधार पर, दृश्य को विकृत कर सकता है।

एक उदाहरण:

ऑर्थो बनाम परिप्रेक्ष्य

(ए) ऑर्थोग्राफ़िक प्रक्षेपण में एक दृश्य है। (बी) एक ही दृश्य है, एक परिप्रेक्ष्य प्रक्षेपण का उपयोग कर। 2 डी गेम में, यह स्प्राइट्स की गलत स्थिति का कारण बन सकता है अगर उनकी गहराई को बदल दिया जाए (जो कि आप विकास के बारे में कैसे जाते हैं, इस पर निर्भर करता है)। एक परिप्रेक्ष्य प्रक्षेपण का उपयोग करना भी स्क्रीन में चीजों को संरेखित करना अधिक कठिन बनाता है।

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


आपका बहुत बहुत धन्यवाद! मैं सिर्फ यह पुष्टि करना चाहता था कि ऐसा करना ठीक होगा।
w4etwetewtwet

4
यदि आपके पास 2D के लिए OpenGL का उपयोग करने की योग्यता और रुचि है, तो यह आपके लिए बहुत सारे पुरस्कार लाएगा जो केवल OpenGL दे सकता है। ब्लिस्टरिंग प्रदर्शन, क्रॉस-प्लेटफॉर्म संगतता ... इसे इस तरह से सोचें। 2D के लिए लगभग सभी अन्य विकल्प वैसे भी OpenGL के शीर्ष पर बनाए जाएंगे । यह कुछ महान "बिचौलियों" को काटने का एक शानदार अवसर है
स्टीवन लू

2
@StevenLu और उल्लेख नहीं करने के लिए, एक असली प्रोग्रामर
23

बहुत अच्छा पढ़ा! लिंक करने के लिए धन्यवाद। Yup: सीधे OpenGL के साथ अपने 2D कोडिंग सिर्फ इसलिए अधिक बदमाश है कि क्यों आप इसे करना चाहिए।
स्टीवन लू

1
आपको केवल एक लिंक के बजाय इस उत्तर को अधिक जानकारी प्रदान करनी चाहिए। शायद समझाते हैं कि जीएल 2 डी (ऑर्थोग्राफिक विचारों) के लिए क्यों काम करता है और यह क्या फायदे लाता है (हार्डवेयर त्वरण, shader प्रभाव)।
सीन मिडिलिचच

22

OpenGL का नाम राज्यों में एक ग्राफिक्स लाइब्रेरी है। यद्यपि यह 3 डी को ध्यान में रखते हुए विकसित किया गया है, लेकिन लाइब्रेरी में कोई हार्डकॉन्ड की धारणा नहीं है कि आप 3 डी का उपयोग कर रहे हैं। इसके अलावा, यह 3 डी क्षमताओं के लिए धन्यवाद, कई चीजें जो कड़ाई से 2 डी दृष्टिकोण में करना मुश्किल होगा, तुच्छ हैं। उदाहरण:

  • 3 डी का उपयोग करके जेड-छँटाई को सरल किया जाता है गहराई बफर का निर्देशन (हालांकि पारदर्शिता के लिए बाहर देखें)
  • स्प्राइट रोटेशन और स्केलिंग मूल रूप से मुफ्त के लिए है जैसा कि आप बनावट वाले quads का उपयोग कर रहे हैं जो संकल्प से स्वतंत्र हैं
  • यदि आप अपने आप को OpenGL 2.0 के सक्षम ग्राफिक्स कार्ड के लिए प्रतिबंधित करने के लिए तैयार हैं, तो आप शेड्स का लाभ उठा सकते हैं, जो विशेष प्रभावों को लिखने में बहुत सरल करेगा (blurs, कण प्रभाव, छवि हेरफेर, रंग प्रतिस्थापन) - यह उल्लेख नहीं किया जाएगा कि बहुत तेजी से किया सीपीयू की ओर से

यह केवल कुछ फायदे हैं जो मेरे सिर के ऊपर से आते हैं, मुझे लगता है कि कई अन्य हैं।


3
कृपया अपने आप को OpenGL 2.0 (या अधिक) के सक्षम ग्राफिक्स कार्ड तक सीमित रखें, OpenGL 2.0 को 2004 में जारी किया गया था, यहां तक ​​कि यह बहुत पुराना है।
स्लीडपैन

@Slicedpan, दुर्भाग्य से कुछ लैपटॉप / नेटबुक अभी भी इंटेल कार्ड के साथ आते हैं जिनके पास जीएल 1.4 अधिकतम समर्थन है - व्यक्तिगत रूप से मैंने उन्हें खाई करने का फैसला किया है, लेकिन कुछ लोग (विशेषकर जब सरल गेम बनाते हैं) उनका समर्थन करना चाह सकते हैं।
कोर्नेल किलीविलेज़

16

जबकि OpenGL एक 3D API है, फिर भी आप इसे 2D गेम्स बनाने के लिए उपयोग कर सकते हैं। आप विभिन्न तकनीकों के माध्यम से 3 डी में 2 डी वातावरण को नकली कर सकते हैं, जैसे कि किसी विमान को डेटा भेजना।

हालांकि, एक स्पष्ट फैशन में ऐसा करने के लिए वास्तविक एपीआई में सीमित समर्थन है (उदाहरण के लिए "2 डी मोड" फ़ंक्शन नहीं है)। जिन तरीकों से आप इसे अनुकरण करेंगे (जो आप ऑनलाइन कई ट्यूटोरियल में पा सकते हैं) 3 डी पाइपलाइन की कुछ समझ के बिना पूरी तरह से समझना मुश्किल हो सकता है जो वास्तव में हुड के तहत उपयोग किया जा रहा है।

ऐसा लगता है कि आप कुछ समय के लिए ओपनजीएल को देख रहे हैं और इसलिए शायद उन बुनियादी बातों की एक अच्छी समझ है। हालांकि, यदि आप उन पर अस्थिर महसूस करते हैं, तो आप एक 2 डी लाइब्रेरी का उपयोग करके अपने खेल के साथ शुरू करना चाहते हैं जो ओपनगेल के शीर्ष पर बनाया गया है, जैसे कि cocos2d । यह आपको कुछ अनुभव देगा कि 2D APIs को आम तौर पर कैसा दिखना चाहिए और फिर भी आपको हार्डवेयर-त्वरित 3D बैक-एंड का लाभ मिलता है, अगर आपको ऐसा लगता है कि आप अपने दम पर पूरी चीज़ से निपटने के लिए बिल्कुल तैयार नहीं हैं।



5

कई 2d ग्राफिक लाइब्रेरी जैसे SDL या SFML , OpenGL हार्डवेयर त्वरण का उपयोग करते हैं। यह आपको OpenGL के प्रदर्शन का लाभ देता है, लेकिन बहुत सरल एपीआई के पीछे के नीचले स्तर के विवरण को सार करता है।


0

मुझे अब OpenGl प्रोग्रामिंग का बहुत अनुभव है, और मैं आपको बता सकता हूं कि यह एक दर्द है। अतीत में जब मैंने प्रोग्रामिंग शुरू की थी तब मैं ब्लिट्जबैसिक जैसे सरल वातावरण में बहुत उत्पादक था। फिर मैंने C ++ और OpenGl सीखने के साथ अगले चरण में जाना शुरू किया। और जब आपके पास एक अच्छा शिक्षक या लोग पूछने के लिए नहीं होते हैं, तो आप स्थायी रूप से काली स्क्रीन में चले जाएंगे। सबसे बड़ी समस्या ओपनग्ल का राज्य नरक है। टन के स्विच हैं जो आप ओपेंग्ल की स्थिति को बदलने के लिए स्वैप कर सकते हैं। और कुछ स्विच अन्य स्विच पर निर्भर करते हैं। उदाहरण के लिए glGet (GL_TEXTURE_BINDING_2D) glGet (GL_ACTIVE_TEXTURE) पर निर्भर करता है। और प्रलेखन जो राज्य पर निर्भर करता है कि कौन सा अन्य राज्य सबसे अच्छा नहीं है। बनावट लोडिंग जैसे कई कार्यों के लिए आपको इस स्थिति को बदलने की आवश्यकता होती है जो बहुत बार अन्य कोड के टूटने की ओर जाता है जो पुराने राज्य की आवश्यकता होती है। और फिर यह समस्या है कि OpenGl कार्यान्वयन पर निर्भर व्यवहार के रूप में, ताकि आपका कार्यक्रम आपके मशीन पर चलता रहे लेकिन दूसरी मशीन पर आप सभी को काला दिखाई दे। आप यहाँ कर सकते हैं कि आप अनुमान लगा रहे हैं कि कोड की 10000 पंक्तियों में क्या गलत है। इसलिए अगर आपको निराशा पसंद है तो 2 डी चीजों के लिए ओपनग्ल का इस्तेमाल करें। अन्य सभी लोगों के लिए, यदि आपको इसकी आवश्यकता नहीं है, तो ऐसा न करें। आप OpenGl में उत्पादक प्राप्त कर सकते हैं, लेकिन यह आपके समय और तंत्रिकाओं का बहुत खर्च करेगा। जितना आप खर्च करना चाहते हैं, उससे अधिक। आप OpenGl में उत्पादक प्राप्त कर सकते हैं, लेकिन यह आपके समय और तंत्रिकाओं का बहुत खर्च करेगा। जितना आप खर्च करना चाहते हैं, उससे अधिक। आप OpenGl में उत्पादक प्राप्त कर सकते हैं, लेकिन यह आपके समय और तंत्रिकाओं का बहुत खर्च करेगा। जितना आप खर्च करना चाहते हैं, उससे अधिक।


-2

यूनिटी 3 डी ओपनजीएल का उपयोग करता है, और मैं इसे 2 डी और 2.5 डी प्लेटफॉर्म के लिए उपयोग करता हूं। यूनिटी 3 डी अनिवार्य रूप से एक 3 डी गेमिंग इंजन है, लेकिन इसका उपयोग 2 डी और 2.5 डी गेम के लिए भी किया जाता है। आपके पास x, y, z प्लेन हो सकते हैं और केवल उन विमानों में से 2 के लिए आंदोलन या रोटेशन को सीमित कर सकते हैं, अनिवार्य रूप से एक 3D दुनिया में 2 डी वातावरण बना सकते हैं।


महान, मेरा पहला पतन। ग्लैम को देखने के लिए खुशी से नफरत है।
अपोलो सॉफ़्टवेयर

1
मुझे लगता है कि वास्तविक दुनिया के उदाहरणों के माध्यम से एक बिंदु को दर्शाया गया है। बहुत ही पेशेवर।
अपोलो सॉफ़्टवेयर

7
अमित, डाउनवोट्स "नफरत" का संकेत नहीं देते हैं। डाउनवोट्स समुदाय के लिए सवालों और जवाबों के बारे में उनकी राय बताने का एक तरीका है। यह आपके लिए व्यक्तिगत नहीं है, इसलिए इसे इस तरह से न लेने की कोशिश करें। मैं सहमत हूं कि डाउनवोटर को डाउनवोट के कारण पर टिप्पणी करनी चाहिए थी, क्योंकि आप नहीं जानते कि प्रतिक्रिया के बिना उत्तर को कैसे सुधारें। मैं आपको बताता हूं कि मुझे क्यों लगता है कि इसे डाउनवोट किया गया था। सिर्फ इसलिए कि एक व्यक्ति 2D गेम्स के लिए OpenGL का उपयोग करता है, इसका मतलब यह नहीं है कि यह उचित है। आपको कारण भी बताना होगा कि यह उपयुक्त क्यों है।
MichaelHouse

2
हाँ, यह निश्चित नहीं है कि लोग नीच क्यों हैं; "OpenGL का उपयोग करता है" बिट मुझे लगा कि "प्लेटफ़ॉर्म पर OpenGL का उपयोग करने वाले" के साथ इसे स्पष्ट किया जाना चाहिए "(यह हर जगह Direct3D या कंसोल-विशिष्ट API का उपयोग करता है लेकिन iOS / Anrdoid / OSX / Linux), लेकिन यह एक सुधार की तुलना में अधिक स्पष्टीकरण है।
शॉन मिडिलडाइच

1
मैंने अपने आप को नीचा नहीं दिखाया, लेकिन एक और कारण यह उत्तर अनुचित है क्योंकि आप एक OpenGL आधारित इंजन का उपयोग कर रहे हैं, न कि कच्चे OpenGL का, जो चीजों को काफी बदल देता है।
w4etwetewtwet
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.