दो टकराने वाले निकायों की पैठ कैसे हल करें


9

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

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

तो मेरा सवाल है कि क्या पैठ को हल करने का एक बेहतर तरीका है? शायद निकायों को स्थानांतरित नहीं करते हैं, बस किसी तरह अपने वेगों (आवेग गणना के अलावा) को समायोजित करते हैं ताकि वे एक-दूसरे की ओर बढ़ना बंद कर दें और प्रवेश अगले जोड़े के फ्रेम में ही हल हो जाए। मैं यहां सिर्फ अनुमान लगा रहा हूं। कोई विचार?

जवाबों:


3

जब आप टकराव का पता लगाते हैं, तो निर्धारित करें कि किस समय / बिंदु पर शरीर पहले टकराना शुरू हुआ, और इस बिंदु पर टकराव का इलाज करें। इस बिंदु पर हल करने के लिए आपके पास अभी भी थोड़ी सी पैठ हो सकती है, लेकिन यह बहुत छोटा होगा और [आमतौर पर] आपके द्वारा होने वाले दोलन मुद्दों को उत्पन्न नहीं करेगा।

आओ हम कहते हैं कि आपके पास 100ms सिमुलेशन के चरण हैं और कुछ फ्रेम में, आपके पास दो गेंदें हैं जो फ्रेम में आधे रास्ते (50ms) से टकराती हैं। सबसे पहले, आप पता लगाएंगे कि वे फ्रेम के किसी भी बिंदु पर टकरा गए (मुझे विश्वास है कि आप पहले से ही प्रभावी ढंग से कर रहे हैं)। वे तय करेंगे कि जिस फ्रेम से वे टकराए थे, उस बिंदु पर क्या होगा। अब टकराव को संभालें, जिसमें फ्रेम के पहले 50ms शामिल हैं जिसमें वे टकराए नहीं थे। अब आपके पास गेंदों के नए वेग होंगे, और आप यह सुनिश्चित करने के लिए भी अब कदम उठा सकते हैं कि वे मर्मज्ञ नहीं हैं (ये बहुत छोटे होने चाहिए क्योंकि "अभी हुआ।") आखिरकार, आप अगले 50 के दशक का अनुकरण करेंगे। वो फ्रेम। ध्यान दें कि इस अवधि के दौरान, इन दोनों गेंदों में से एक या दोनों के साथ बहुत अच्छी टक्कर हो सकती है।


1
तो आप मूल रूप से निरंतर टकराव का पता लगाने के लिए सुझाव दे रहे हैं और फिर वे पहले से ही मेरे द्वारा किए जाने वाले पैशन को संभाल लेंगे, क्योंकि वे संभवतः बहुत छोटे होंगे। यह काम कर सकता है मुझे लगता है। अब मुझे केवल यह पता लगाना है कि मेरी टक्कर का पता कैसे लगाया जाए :)
adam

निश्चित नहीं है कि आपके निरंतर होने का क्या मतलब है। कड़ाई से बोलना, भौतिकी सिमुलेशन में कुछ भी निरंतर नहीं है, क्योंकि सब कुछ हमेशा कुछ आकार के असतत चरणों से टूट जाता है। छोटे कदम उठाते हुए, जो अनिवार्य रूप से मैं सुझाव देता हूं, वह बहुत छोटी (और आसान से सही) त्रुटियां पैदा करेगा। इसके बारे में सोचने का एक और तरीका यह है कि चरण आकार और त्रुटियों (जैसे पैठ) के बीच एक सीधा संबंध है। इसलिए जब आप ऐसी त्रुटि का पता लगाते हैं, तब तक छोटे चरणों में टूट जाते हैं जब तक कि त्रुटि तुच्छ रूप से ठीक न हो जाए।
22

लगातार टकराव का पता लगाने का मतलब है कि दो स्थिर वस्तुओं (एक 3 डी समस्या) के बीच चौराहे की जांच करने के बजाय, आप दो चलती वस्तुओं (मूल रूप से, एक 4 डी समस्या) के संपर्क की जांच करते हैं। आमतौर पर यह केवल निरंतर वेग पर विचार करने के लिए पर्याप्त है, क्योंकि आप टुकड़े-टुकड़े रैखिक वक्रों के साथ प्रक्षेपवक्र का अनुमान लगा सकते हैं। फायदा यह है कि फ्लोटिंग राउंडिंग त्रुटियों के कारण प्रवेश दूरी हमेशा शून्य (या उसके करीब) होगी। हालाँकि मैं आपसे इस बारे में बात कर रहा था, लेकिन शायद मैंने आपके जवाब का गलत मतलब निकाला?
adam

@ यादम जी, यही तो मैं बात कर रहा हूँ।
19

2

इस लेख को देखें - जो पहले भी कई बार यहां पोस्ट किया गया है, बस टक्कर-पता लगाने वाले प्रश्नोत्तर के माध्यम से खोज करें - यह आपको दिखाता है कि "निरंतर" टकराव के समाधान को कैसे करना है, जिसके बारे में स्टीफेल्टन बात कर रहे थे:

http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php?page=3

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


धन्यवाद, लेख की जाँच की। बात यह है कि मैं अपनी वस्तुओं के विभिन्न प्रतिनिधित्व का उपयोग कर रहा हूं। मैं उत्तल पॉलीहेड्रा का उपयोग कर रहा हूं और अक्ष प्रमेय को अलग करके टकराव का परीक्षण कर रहा हूं। इसे निरंतर रेखीय वेग के साथ घूमने वाले निकायों को संभालने के लिए बढ़ाया जा सकता है (जो मुझे पता है कि कैसे करना है), लेकिन कोई भी विचार नहीं है कि कोणीय वेगों को भी कैसे संभालना है। लेकिन अगर मैं इस तरह से जाने का फैसला करता हूं तो मैं अलग सवाल पूछूंगा।
अदाम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.