मैं एक 2D भौतिकी इंजन कैसे बनाऊं? [बन्द है]


20

मेरे द्वारा किए गए सबसे उन्नत गेम भौतिकी इंजन Box2dFlashAS3 और स्तरों के साथ एक प्लेटफ़ॉर्म गेम के साथ 8-बॉल पूल गेम हैं।

जब मैंने प्लेटफ़ॉर्म गेम किया, तो मैं हमेशा यह जानना चाहता था कि इंजन कैसे बनाया जाए, ताकि मैं इसका दोबारा इस्तेमाल कर सकूं। जब मैं ऐसे खेल देखता हूं जिनमें ढलान, घुमावदार ढलान, परिपूर्ण गुरुत्वाकर्षण और वास्तविक जीवन भौतिकी है, तो मैंने हमेशा सोचा है कि मुझे पता था कि इंजन को कैसे कोड किया जाए।

कृपया जो भी प्रासंगिक ज्ञान-आधार आवश्यक हो, उसके लिए तकनीक और लेख सुझाएं।


जवाबों:


16

हालांकि, मैं यह करने के अनुभव के अलावा किसी अन्य चीज़ के लिए अपने स्वयं के भौतिकी इंजन को रोल करने की सलाह देता हूं (बस महसूस करें कि शायद आपको इसे तब फेंकना चाहिए जब आप पूरा कर लें - यह वास्तव में सभी edgecases और संख्यात्मक सीमा / स्थिरता के मुद्दों को हल करना मुश्किल है। , और आपका समय किसी मौजूदा इंजन में योगदान देकर बेहतर हो सकता है), यहां कुछ संसाधन दिए गए हैं:

पूल हॉल पाठ: फास्ट, सटीक टकराव का पता लगाने के बीच सर्किलों या क्षेत्रों के बीच सर्कल / सर्कल और क्षेत्र / गोलाकार टकराव पर चर्चा होती है।

एन ट्यूटोरियल अलग एक्सिस प्रमेय आधारित पता लगाने और प्रतिक्रिया का एक बुनियादी समझ के लिए अद्भुत है।


9

बॉक्स 2 डी के कार्यान्वयन के बारे में एरिन कट्टो के पास जीडीसी के सभी व्याख्यान हैं । Box2D में भी मेरे अनुभव में पढ़ने के लिए सीधा कोड है।


पीडीएफ वास्तव में कठिन सामग्री है। लेकिन, जब मैंने सीपीपी और एच फाइलों के माध्यम से पढ़ा, तो जैसा कि आपने कहा, वे "समझने योग्य" हैं। धन्यवाद।
विष्णु

+1। Box2D भी स्थिरता के बारे में बहुत सावधान है, उन चीजों में से एक जो बहुत मुश्किल है जब आप अपना खुद का रोल कर रहे हैं।
leander

5

यहां बताया गया है कि आप इसे कैसे कर सकते हैं:

आंदोलन का विरोध

हर भौतिक वस्तु को इन वैक्टर की जरूरत होती है:

  • स्थिति : जहां वस्तु है।
  • गति : इसकी स्थिति कैसे बदल रही है।
  • त्वरण : इसकी गति कैसे बदल रही है।

इसलिए, सहज रूप से, आपको इस प्रकार की हर फ़्रेम को प्रत्येक भौतिक वस्तु पर करने की आवश्यकता है a:

a.speed    += a.acceleration
a.position += a.speed

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

टक्कर

इस तरह के अनुक्रम के साथ टकराव का अनुमान लगाया जा सकता है:

  1. पता लगाना : यह पता चला है कि दो शरीर प्रतिच्छेद करते हैं।
  2. रिज़ॉल्यूशन : प्रत्येक शरीर की स्थिति बदल जाती है, इसलिए वे अब प्रतिच्छेद नहीं करते हैं।
  3. भौतिकी : गति, घर्षण और पुनर्स्थापन (बाउंसनेस) के लिए प्रत्येक शरीर की गति को बदल दिया जाता है।

यह असतत टकराव का पता लगाने के रूप में जाना जाता है, क्योंकि यह समय में असतत बिंदुओं पर होता है। प्रत्येक चरण ध्यान देने योग्य है:

चरण 1: टकराव का पता लगाना (क्या चीजें टकरा रही हैं?)

के लिए दो हलकों : बस की जाँच करता है, तो उनके केंद्रों के अलावा उनके त्रिज्या की संख्या से अधिक है।

के लिए दो आयतों : चेक अपने कोने निर्देशांक के किसी भी अन्य आयत के भीतर कर रहे हैं।

अधिक जटिल बहुभुजों को शामिल करने वाली किसी भी चीज़ के लिए , आपको पृथक्करण-एक्सिस-प्रमेय की आवश्यकता होगी , जो किसी अन्य प्रश्न के लिए एक विषय है।

नुकसान : वास्तव में कई अन्य टकराव प्रकार हैं जिन पर आप विचार करना चाह सकते हैं। कुछ वास्तव में जटिल हैं: उत्तल बहुभुज कई बार प्रतिच्छेद कर सकते हैं !

चरण 2: टकराव संकल्प (उन्हें अलग-अलग ले जाना)

टकराव का पता लगाने का एक सरल तरीका न्यूनतम पैठ द्वारा अनुवाद है , टक्कर का पता लगाने से प्राप्त मूल्यों का उपयोग करना। इसमें अनिवार्य रूप से वस्तुओं को गति के न्यूनतम संभव दूरी के साथ अलग करना शामिल है।

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

यह विचार आसानी से अन्य आकृतियों में सामान्य हो जाता है।

नुकसान : यदि दोनों टकराने वाली वस्तुएं जंगम हैं, तो आपको अपने आंदोलन के एक विश्वसनीय अनुमान प्राप्त करने के लिए दोनों को समग्र दूरी के कुछ अंश से स्थानांतरित करना पड़ सकता है। उन्हें स्पष्ट रूप से अलग-अलग दिशाओं में जाना होगा।

चरण 3: टकराव भौतिकी (अन्य परिवर्तन।)

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

नुकसान : ऑब्जेक्ट लोचदार हो सकते हैं , लेकिन वे नहीं हो सकते हैं , जिस स्थिति में सिस्टम में कुल ऊर्जा कम हो जाती है। वायु प्रतिरोध के कारण आपको ड्रैग की आवश्यकता हो सकती है । घर्षण (विशेष रूप से स्थिर घर्षण ) को लागू करने के लिए कुख्यात है ।

कुछ निष्कर्ष

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

यदि आपकी ज़रूरतें सरल हैं या आप सीखने के लिए उत्सुक हैं, तो इसे आज़माएँ।

यदि आपकी ज़रूरतें जटिल हैं या आपको गणित पसंद नहीं है, तो अपने लिए विवरणों को चमकाने के लिए एक भौतिकी इंजन प्राप्त करें । Box2D और Bullet गेम में काफी लोकप्रिय हैं।



4

संभवतः सबसे व्यापक ट्यूटोरियल शैली संसाधन:
http://www.wildbunny.co.uk/blog/2011/04/06/physics-engines-for-dummies/

एक ही ब्लॉग से इन संबंधित लेखों को भी देखें:
http: // www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/
http://www.wildbunny.co.uk/blog/2011/03/25/specactory-contacts-an- निरंतर टक्कर इंजन-दृष्टिकोण-भाग -1 /


1
वाइल्डबनी ब्लॉग प्रविष्टियाँ बहुत अच्छी हैं। +1।
कम्युनिस्ट डक

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