लेखन खेल OpenGL के साथ खरोंच से इंजन [बंद]


15

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

मेरी प्रोग्रामिंग भाषाएँ और उपकरण हैं:

  • C / C ++ क्या केवल C का उपयोग करना अच्छा है?
  • अजगर
  • ओपन
  • Git
  • GDB

मैं इससे क्या सीखना चाहता हूं:

  • कोर गेम इंजन
  • प्रतिपादन / ग्राफिक्स
  • खेल खेलते हैं / नियम
  • इनपुट (कीबोर्ड / माउस / नियंत्रक, आदि)

प्रतिपादन / ग्राफिक्स में:

  • 3 डी
  • लकीर खींचने की क्रिया
  • प्रकाश
  • संरचना

दो बिंदु: यह प्रश्न, जैसा कि यह है, बहुत व्यापक है। आप कौन सी सुविधाएँ चाहते हैं, आप किस प्लेटफ़ॉर्म (एस) का समर्थन करना चाहते हैं, आप कौन सी प्रतिमानों की खोज करना चाहते हैं, स्क्रिप्टिंग लैंग्वेज (यदि कोई हो), और अन्य चीजों की पूरी मेजबानी के लिए आप कितनी ज़िम्मेदारी चाहते हैं, ' मी परेशान नहीं करने के लिए बाहर लिस्टिंग जारी है।
टेट्राद

8
दो: एक सामान्य प्रचलित ज्ञान है कि अन्य लोग चिल्लाएंगे कि आपको बिना खेल के इंजन बनाने पर ध्यान नहीं देना चाहिए। एक खेल के बिना एक इंजन का मतलब है कि आप साबित नहीं कर सकते कि आपका इंजन उपयोगी है । अच्छे इंजन को लोगों को अपने कुत्ते के भोजन को खाने की आवश्यकता होती है, जैसा कि यह था। एक सामान्य रूप से जुड़ा हुआ-टू में इस तर्क के और अधिक यहाँ है जा रहा ब्लॉग: scientificninja.com/blog/write-games-not-engines
Tetrad

2
^ इतना ही नहीं, बल्कि फीचर क्री और खराब एपीआई डिजाइन में परिणाम की आवश्यकताओं को प्रेरित करने के लिए एक गेम के बिना इंजन लिखना। जब तक आप जानते हैं कि आपको क्या चाहिए, खेल आवश्यकताओं से संकेत मिलता है, तो आप उपयोगी चीजों को अपने इंजन में नहीं डाल सकते हैं। उसी टोकन के द्वारा, यदि आपको इंजन के साथ प्रोग्राम करने के लिए उपयोग नहीं करना है, तो आप अपने कुछ निर्णय वास्तव में क्लिंक हो सकते हैं।
क्रिस ऐस

1
मुझे आपकी सूची में वह बिंदु दिखाई नहीं दे रहा है। तथ्य यह है कि आप जानते हैं कि C / C ++ और पायथन हमारी मदद करते हैं, लेकिन सूची क्यों है कि आप संस्करण नियंत्रण और डीबगर का उपयोग कर सकते हैं?
कम्युनिस्ट डक

2
@ TheCununistDuck: अरे, यह कुछ डेवलपर्स से बेहतर है। :)
क्रिस

जवाबों:


11

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

इसलिए, मुझे लगता है कि यह परिभाषित करना सबसे अच्छा होगा कि आप अपने इंजन को लिखने में क्या सीखना चाहते हैं। खेल के विकास में बहुत सारे "क्षेत्र" हैं।

  • कोर गेम इंजन

  • प्रतिपादन / ग्राफिक्स

  • नेटवर्किंग

  • खेल खेलते हैं / नियम

  • ध्वनि

  • इनपुट (कीबोर्ड / माउस / नियंत्रक, आदि)

आदि .. वहाँ से आप उप विषय भी कर सकते हैं। रेंडरिंग / ग्राफिक्स में

  • 2d या 3 डी?

  • मोडलिंग

  • लकीर खींचने की क्रिया

  • प्रकाश

  • संरचना

  • GUIs / HUDs / इंटरफेस।

  • आदि आदि

बस उन उप-उप-विषयों में से एक अध्ययन के कई घंटे (या वर्ष!) खा सकता था।

इसलिए, पहले परिभाषित करें कि आप क्या सीखना चाहते हैं। सरल शुरू करो।

जिस भी भाषा में आप सहज हैं, उसका उपयोग करें - हालांकि कुछ निश्चित कार्यों के लिए बेहतर अनुकूल हैं। उदाहरण के लिए, कोर इंजन और रेंडरिंग संभवतः "C" / C ++ जैसी "निम्न" स्तर की भाषा के साथ किया जाता है (यदि आपको प्रदर्शन की आवश्यकता है); लेकिन एआई या गेम रूल्स जैसी कोई चीज़ उच्च स्तर की भाषा में बेहतर हो सकती है। कुछ भी नहीं कहता है कि आप मिश्रण और मैच नहीं कर सकते। आप अपने इंजन को C ++ में लिख सकते हैं, C में आपका प्रतिपादन (क्योंकि यह OpenGL के साथ अच्छा काम करता है) और फिर अपने गेम रूल्स आदि को स्क्रिप्ट करने के लिए LUA का उपयोग करें।

जहाँ तक उदाहरण है, एक गेम इंजन है जिसे Slick2D कहा जाता है। यह जावा में लिखा गया है और खुला स्रोत है। यह एक सरल 2d इंजन का एक उदाहरण है जो लिखित और वास्तव में अच्छी तरह से डिज़ाइन किया गया है। आप उससे बुनियादी अवधारणाओं को सीख सकते हैं, जैसे गेम लूप, गेम स्टेट्स का प्रबंधन करना आदि।

यदि आपके सी / सी ++ के साथ सहज; मैं SDL / OpenGL पर एक नज़र डालने का सुझाव दूंगा। यह कुछ हाउसकीपिंग जैसे इनपुट, साउंड, विंडो बनाना आदि को हैंडल करता है और अन्य सामान पर ध्यान केंद्रित कर सकता है।


4
उन दिनों में जब मैं C ++ सीख रहा था और कंसोल गेम बहुत ही मजेदार थे ... [नया कंसोल प्रोजेक्ट बनाता है ...]
निक बेडफोर्ड

मैंने अपना प्रश्न अपडेट किया, मुझे बहुत सारे भयानक संसाधन देने की उम्मीद है :)
वज़री

4

SDL + OpenGL एक कस्टम गेम इंजन शुरू करने के लिए एक उत्कृष्ट विकल्प है।

मैं व्यक्तिगत रूप से C ++ के C-ish संस्करण का उपयोग करता हूं क्योंकि मुझे पता चला है कि मेरे लिए सबसे अच्छा काम करता है। इसका मतलब है कि मैं किसी भी अपवाद का उपयोग नहीं करता हूं। इसके दो कारण हैं: पहला और सबसे महत्वपूर्ण अपवादों के लिए सभी तरह से अपवाद सुरक्षित कोड की आवश्यकता होती है जो ओपनजीएल और एसडीएल के साथ प्राप्त करना बिल्कुल आसान नहीं है। इससे भी महत्वपूर्ण बात यह है कि C ABI के ऊपर C ++ ऑब्जेक्ट्स को एक्सपोज़ करना बहुत आसान है, जो कि यदि आप स्क्रिप्टिंग लैंग्वेज को मिक्स में लाने की कोशिश करते हैं तो यह अविश्वसनीय मददगार है।

मैं आपकी तुलना में एक समान नाव में हूं और मैंने अपने कुछ साहसिक कारनामों को SDL और OpenGL के साथ एक ब्लॉग में लिखा ( डूबे हुए ) यदि कोई और इच्छुक हो।

सामान्य वास्तुकला के लिए मेरे पास दो सुझाव हैं: यदि आप चाहते हैं कि एक 3 डी इंजन जेसन लैंडर की पुस्तक "गेम इंजन आर्किटेक्चर" की जाँच करें। यदि आप चाहते हैं कि 2 डी है, तो डिज़ाइन को यथासंभव सरल रखें और अपने आप को एक्सएनए या अन्य परियोजनाओं से प्रेरित होने दें।

अंत में: सभी जगह ओपनजीएल को न बुलाएं। अपने आप को एक एहसान करो और इसे दो स्थानों में अलग करें ताकि आप डेस्कटॉप ओपनगैल / ओपनजीएल ईएस या यहां तक ​​कि डायरेक्टएक्स के बीच स्विच कर सकें यदि आप चाहते हैं।


0

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

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

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


4
"ओपनजीएल बनाम डीएक्स"। तथ्य यह है कि DirectX अधिक OO है वास्तव में महत्वपूर्ण नहीं है। जहाँ तक अधिक समझा जा सकता है ... ओपनजीएल (3 से पहले) एक काफी सरल इंटरफ़ेस को उजागर करता है, और एक जिसे स्कैन करना आसान है क्योंकि यह सभी सी-स्टाइल अनिवार्य कार्यप्रणाली में है। "प्रक्षेपण मैट्रिक्स को इस पर सेट करें। त्रिकोण शुरू करें। यहां एक लंब है। यहां एक लंब है। यहां एक लंबवत त्रिकोण है।" ओपनजीएल एपीआई की 1.x श्रृंखला ग्राफिक्स प्रोग्रामिंग में आपके पैरों को गीला करने के लिए अच्छी है, और एसडीएल (या यहां तक ​​कि ग्लूट ... तत्काल) के साथ मिलकर आपको ऐप को कोड के 30-50 लाइनों की तरह प्राप्त करने की सुविधा देता है।
क्रिस ऐस

2
@ क्रिस: ज़रूर बात। वहाँ कुछ कहा जाता है extern "C", और यह उचित उपयोग एक सी इंटरफ़ेस लिखने के बजाय तुच्छ बनाता है- विशेष रूप से पायथन के लिए, जहां बूस्ट के भीतर एक कनवर्टर मौजूद है जो इसे आसान बनाता है। कैसे सी + + भाषा सुविधाओं के बारे में? वे महान हैं । C ++ की भाषा सुविधाओं का अधिक उपयोग एक परियोजना की विश्वसनीयता बढ़ाता है और स्वीकार्य बहुत मामूली प्रदर्शन व्यापार बंद के लिए बड़े पैमाने पर कोडिंग में आसानी। सी की भाषा सुविधाएँ तुलना में दयनीय हैं। उदाहरण के लिए, एक आधुनिक C ++ कंपाइलर का सही उपयोग बिना मेमोरी लीक की गारंटी दे सकता है । सी। में ऐसा करें
डेडएमजी

1
@ डेडएमजी: यदि ओओपी वास्तव में एक बड़ी बात थी, तो, इसका उत्तर यहां जावा या सी # है, न कि सी ++। जिस चीज से मैं असहमत हूं, वह यह है कि सी ++ सुविधाओं का उपयोग जादुई रूप से आपके कोड को बेहतर, तेज या अधिक विश्वसनीय नहीं बनाता है; आपको पता है कि उन सुविधाओं का उपयोग कैसे करना है, और एक इंजन को आर्किटेक्चर करने के अलावा एक भाषा सीखना वास्तव में एक समय का एक अच्छा उपयोग है? नहीं, पहली बार ऐसा करने वाले किसी व्यक्ति के लिए नहीं। आप एक-दो दिन में C को आराम से सीख सकते हैं, और कभी आश्चर्य नहीं कर सकते कि भाषा क्या कर रही है। ओपनजीएल, किसी भी दर पर उपयोगी बुनियादी कॉल सेट, एक ही पारदर्शिता प्रदान करता है।
क्रिस

2
OOP उच्च प्रदर्शन वाले गेम इंजनों में नहीं बल्कि एक सौदे का बड़ा हिस्सा है। यकीन है कि यह उपयोगी है, लेकिन यह अक्सर गलत अमूर्तता है। अच्छा डेटा प्रवाह, स्थानीयता और मेमोरी लेआउट का होना आमतौर पर बेहतर होता है। जबकि बहुत सी टीमें C ++ का उपयोग कर रही हैं, वे C ++ की अधिकांश सुविधाओं का उपयोग नहीं करती हैं। कोई अपवाद नहीं, जितने संभव हो उतने आभासी, कोई आरटीटीआई, कोई एसटीएल / बूस्ट। क्यों? कई प्लेटफार्मों पर पेडिकेबल और तेज निष्पादन और छोटे कोड। मैं सी में कोड करता हूं और केवल दो क्षेत्र हैं जिनमें मैं सी ++ का उपयोग करूंगा: स्कॉप्ड लॉक और जेनेरिक सरणियां। परेशानी लायक नहीं IMHO।
शून्य

4
जीएल बनाम डी 3 डी पर: जीएल 3/4 कोर में कोई मैट्रिक्स स्टैक नहीं है, और न ही अट्रिब स्टैक। जीएल और डी 3 डी दोनों एक ही हार्डवेयर आर्किटेक्चर के लिए मैप करते हैं, लेकिन बहुत समय जीएल थिनर लगता है। यकीन है कि जीएल राज्य मशीन एक परेशानी का एक सा है, लेकिन इतना वास्तविक हार्डवेयर है;) उनमें से किसी को सीखना ठीक है, और जब तक आप समझते हैं कि वास्तव में क्या हो रहा है आप आसानी से दूसरे (या कंसोल एपीआई) पर स्विच कर सकते हैं।
शून्य
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.