टक्कर इंजन कैसे काम करता है?


78

टकराव इंजन वास्तव में कैसे काम करता है?

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

यदि आप नहीं जानते हैं कि टक्कर इंजन क्या है, तो मूल रूप से इसका उपयोग प्लेटफ़ॉर्म गेम में खिलाड़ी को एक्यूट हिट दीवारों और इस तरह बनाने के लिए किया जाता है । 2 डी प्रकार और 3 डी प्रकार है, लेकिन वे सभी एक ही चीज को पूरा करते हैं: टकराव।

तो, क्या टकराव इंजन टिक कर रखता है?


3
आप बाउंडिंग बॉक्स और गोले के साथ धोखा कर सकते हैं, जिसका चौराहा निर्धारित करने के लिए तेज है। तब आप अधिक बारीकी से निरीक्षण कर सकते हैं। cs.unc.edu/~dm/collision.html en.wikipedia.org/wiki/Collision_detection आप इसे धीरे-धीरे एक भोली एल्गोरिथ्म के साथ कर सकते हैं। Comp ज्यामिति में कुछ तरकीबें हैं जो समस्या की ज्यामितीय प्रकृति का लाभ उठाती हैं और एल्गोरिथ्म को तेज़ बनाती हैं। यहाँ एक बहुत अच्छा पेपर है: cs.hku.hk/research/techreps/document/TR-2005-01.pdf

टक्कर इंजन क्या है ?

4
@ कॉनटैग एक टक्कर इंजन मूल रूप से खेलों (आमतौर पर) में इस्तेमाल किया जाने वाला इंजन है ताकि आपका खिलाड़ी (उसे बॉब कहे), जब भी बॉब दीवार में जाता है, बॉब रुक जाता है, बॉब दीवार से नहीं चलता है। वे आम तौर पर एक गेम में गुरुत्वाकर्षण और उस तरह की पर्यावरणीय चीजों को संभालते हैं।
JXPheonix

जवाबों:


172

टक्कर इंजन और भौतिकी इंजन के बीच एक बड़ा अंतर है। वे एक ही काम नहीं करते हैं, हालांकि भौतिकी इंजन आमतौर पर टकराव इंजन पर निर्भर करता है।

टक्कर इंजन को दो भागों में विभाजित किया गया है: टक्कर का पता लगाने और टक्कर की प्रतिक्रिया। उत्तरार्द्ध आमतौर पर भौतिकी इंजन का हिस्सा होता है। यही कारण है कि टक्कर इंजन और भौतिकी इंजन आमतौर पर एक ही पुस्तकालय में लुढ़के होते हैं।

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

टक्कर की पहचान हुई है

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

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

व्यापक चरण प्रत्येक वस्तु के लिए स्थानिक डेटा संरचनाओं और एक अमूर्त बाउंडिंग वॉल्यूम का उपयोग करता है। एक बाउंडिंग वॉल्यूम एक साधारण आकार है जो पूरे ऑब्जेक्ट को घेरता है, आम तौर पर इसे "कसकर" के रूप में संलग्न करने के लक्ष्य के साथ जबकि टक्कर परीक्षणों को करने के लिए सस्ते रहते हैं। सबसे आम बाउंडिंग आकार एक्सिस-संरेखित बाउंडिंग बॉक्स, ऑब्जेक्ट-संरेखित बाउंडिंग बॉक्स, गोलाकार और कैप्सूल हैं। AABB को आमतौर पर सबसे तेज़ और सबसे आसान माना जाता है (कुछ मामलों में Spheres आसान और तेज़ होते हैं, लेकिन उन स्थानिक डेटा संरचनाओं में से कई को वैसे भी AABB में गोले को परिवर्तित करने की आवश्यकता होती है), लेकिन वे भी कई वस्तुओं को खराब तरीके से फिट करते हैं। वर्ण-स्तरीय टकराव से निपटने के लिए 3 डी इंजन में कैप्सूल लोकप्रिय हैं। कुछ इंजन दो बाउंडिंग आकृतियों का उपयोग करेंगे,

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

मैनिफोल्ड जनरेशन से संपर्क करें

यहां उपयोग किए जाने वाले एल्गोरिदम में लोकप्रिय जीजेके और मिंकोव्स्की पोर्टल शोधन एल्गोरिदम शामिल हैं, साथ ही पृथक्करण अक्ष परीक्षण भी शामिल है। क्योंकि लोकप्रिय एल्गोरिदम आमतौर पर केवल उत्तल आकृतियों के लिए काम करते हैं, इसलिए कई जटिल वस्तुओं को उत्तल उप-वस्तुओं में तोड़ना आवश्यक है, और प्रत्येक के लिए टकराव परीक्षण करना आवश्यक है। यह एक कारण है कि सरलीकृत मेष का उपयोग अक्सर टकराव के लिए किया जाता है, साथ ही कम त्रिकोण का उपयोग करने के लिए प्रसंस्करण समय में कमी।

इनमें से कुछ एल्गोरिदम न केवल आपको बताते हैं कि ऑब्जेक्ट निश्चित रूप से टकरा गए हैं, लेकिन वे कहाँ टकराए हैं - वे कितनी दूर एक दूसरे को भेद रहे हैं और "संपर्क बिंदु" क्या हैं। इस जानकारी को प्राप्त करने के लिए कुछ एल्गोरिदम को अतिरिक्त चरणों की आवश्यकता होती है, जैसे बहुभुज कतरन।

शारीरिक प्रतिक्रिया

इस बिंदु पर, एक संपर्क की खोज की गई है, और संपर्क को संसाधित करने के लिए भौतिकी इंजन के लिए पर्याप्त जानकारी है। भौतिकी का संचालन बहुत जटिल हो सकता है। सरल एल्गोरिदम कुछ गेम के लिए काम करते हैं, लेकिन यहां तक ​​कि कुछ के रूप में प्रतीत होता है सीधे-आगे के रूप में बक्से के ढेर को स्थिर रखने के लिए काफी मुश्किल हो जाता है और बहुत सारे काम और गैर-स्पष्ट हैक्स की आवश्यकता होती है।

सबसे बुनियादी स्तर पर, भौतिकी इंजन कुछ ऐसा करेगा: यह टकराती हुई वस्तुओं और उनके संपर्क को कई गुना लेगा और टकराई हुई वस्तुओं को अलग करने के लिए आवश्यक नए पदों की गणना करेगा। यह वस्तुओं को इन नए पदों पर ले जाएगा। यह इस परिवर्तन से उत्पन्न होने वाले वेग परिवर्तन की गणना भी करेगा, जो पुनर्स्थापना (बाउंसनेस) और घर्षण मूल्यों के साथ संयुक्त है। भौतिकी इंजन वस्तुओं पर अभिनय करने वाले किसी भी अन्य बल को भी लागू करेगा, जैसे कि गुरुत्वाकर्षण, वस्तुओं के नए वेगों की गणना करने के लिए, और फिर (अगले फ्रेम) उनके नए पदों पर।

अधिक उन्नत भौतिकी प्रतिक्रिया जल्दी से जटिल हो जाती है। ऊपर का दृष्टिकोण कई स्थितियों में टूट जाएगा, जिसमें दो अन्य के शीर्ष पर बैठे एक वस्तु भी शामिल है। प्रत्येक जोड़ी को खुद से निपटाने से "घबराहट" होगी और वस्तुएं बहुत अधिक उछलेंगी। सबसे बुनियादी तकनीक वस्तुओं के टकराने से अधिक वेग-सुधार पुनरावृत्तियों को करना है। उदाहरण के लिए, एक बॉक्स "ए" के साथ दो अन्य बॉक्स "बी" और "सी" के शीर्ष पर बैठे, टक्कर एबी को पहले संभाला जाएगा, जिससे बॉक्स ए को बॉक्स सी में आगे झुकाव होगा। फिर एसी टक्कर को संभाला जाएगा, शाम बक्से को कुछ हद तक, लेकिन ए को नीचे और बी में खींचकर फिर एक और पुनरावृत्ति की जाती है, इसलिए एसी सुधार के कारण होने वाली एबी त्रुटि को थोड़ा हल किया जाता है, जिससे एसी प्रतिक्रिया में थोड़ी अधिक त्रुटि पैदा होती है। जिसे तब पुनः संभाला जाता है जब एसी को फिर से संसाधित किया जाता है। किए गए पुनरावृत्तियों की संख्या निश्चित नहीं है, और ऐसा कोई बिंदु नहीं है जिस पर यह "पूर्ण" हो जाता है, बल्कि इसके बजाय जो भी पुनरावृत्तियों की संख्या सार्थक परिणाम देना बंद कर देती है। 10 पुनरावृत्तियों एक विशिष्ट पहली कोशिश है, लेकिन यह एक विशेष इंजन और एक विशेष खेल की जरूरतों के लिए सबसे अच्छी संख्या का पता लगाने के लिए tweaking लेता है।

कैशिंग से संपर्क करें

कई प्रकार के गेम से निपटने के दौरान अन्य ट्रिक्स हैं जो वास्तव में आसान (कम या ज्यादा आवश्यक) हैं। संपर्क कैशिंग अधिक उपयोगी लोगों में से एक है। संपर्क कैश के साथ, ऑब्जेक्ट्स को टकराने का प्रत्येक सेट लुकअप टेबल में सहेजा जाता है। प्रत्येक फ्रेम, जब एक टक्कर का पता लगाया जाता है, तो यह कैश यह देखने के लिए क्वेर होता है कि क्या ऑब्जेक्ट पहले संपर्क में थे। यदि ऑब्जेक्ट पहले से संपर्क में नहीं थे, तो एक "नई टक्कर" घटना उत्पन्न हो सकती है। यदि ऑब्जेक्ट पहले से संपर्क में थे, तो जानकारी का उपयोग अधिक स्थिर प्रतिक्रिया प्रदान करने के लिए किया जा सकता है। संपर्क कैश में कोई भी प्रविष्टि जो एक फ्रेम में अपडेट नहीं की गई थी, वह दो वस्तुओं को इंगित करती है जो अलग हो गईं, और "अलग करने वाली वस्तु" घटना उत्पन्न हो सकती है। खेल तर्क अक्सर इन घटनाओं के लिए उपयोग करता है।

गेम लॉजिक के लिए नई टक्कर की घटनाओं का जवाब देना और उन्हें नजरअंदाज करना संभव है। यह प्लेटफार्मों में कुछ सुविधाओं को लागू करने के लिए वास्तव में मददगार है, जैसे कि आप प्लेटफॉर्म पर कूद सकते हैं, लेकिन खड़े रह सकते हैं। Naive कार्यान्वयन सिर्फ उन टकरावों को अनदेखा कर सकता है जिनमें एक डाउनवर्ड प्लेटफ़ॉर्म होता है-> वर्ण टकराव सामान्य (प्लेटफॉर्म के नीचे खिलाड़ी के सिर पर चोट लगने का संकेत), लेकिन संपर्क कैशिंग के बिना, यह टूट जाएगा यदि खिलाड़ी का सिर प्लेटफ़ॉर्म के माध्यम से ऊपर उठाता है और फिर वह शुरू होता है गिरना। उस बिंदु पर, संपर्क सामान्य ऊपर की ओर इशारा करते हुए समाप्त हो सकता है, जिससे खिलाड़ी को मंच के माध्यम से पॉप अप करना चाहिए, जब उसे नहीं करना चाहिए। कॉन्टैक्ट कैशिंग के साथ, इंजन मज़बूती से शुरुआती टक्कर को सामान्य रूप से देख सकता है और आगे के सभी कॉन्टैक्ट इवेंट्स को तब तक अनदेखा कर सकता है जब तक कि प्लेटफ़ॉर्म और प्लेयर फिर से अलग न हो जाए।

सोया हुआ

एक अन्य बहुत ही उपयोगी तकनीक वस्तुओं को "सो" होने के रूप में चिह्नित करना है यदि उनके साथ बातचीत नहीं की जा रही है। सो रही वस्तुओं को भौतिकी के अद्यतन नहीं मिलते हैं, अन्य सोई हुई वस्तुओं से नहीं टकराते हैं, और मूल रूप से बस समय में जमे हुए बैठते हैं जब तक कि कोई अन्य गैर-नींद वाली वस्तु उनसे न टकराए।

इसका असर यह होता है कि सभी जोड़े टकराती हुई वस्तुएं जो सिर्फ वहीं बैठी रहती हैं, कुछ भी प्रसंस्करण समय नहीं लेती हैं। इसके अलावा, क्योंकि छोटे भौतिकी सुधारों की निरंतर मात्रा नहीं है, स्टैक स्थिर होंगे।

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

प्रतिबन्ध

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

यहां तक ​​कि बाधा को सुलझाने की मूल बातें बहुत ही गहन हो सकती हैं और इस विषय में मेरी विशेषज्ञता से परे है। मैं विषय पर अधिक गहराई से व्याख्या के लिए भौतिकी पर रैंडी गॉल की उत्कृष्ट लेख श्रृंखला की जाँच करने की सलाह देता हूं ।


यदि आपका टकराव की न्यूनतम संख्या को संबोधित करने जा रहा है, तो आपको संभवतः संख्या को यथासंभव कम रखने की आवश्यकता पर भी ध्यान देना चाहिए क्योंकि एक जटिल सेटअप में अधिक संख्या में टकराव की अनुमति देने से फ्रेम दर में कमी आएगी। तब जब आप पुनरावृत्तियों की संख्या के बारे में बात कर रहे थे, तो वह प्रति जोड़ी थी, या सभी टकरावों के लिए थी।
गार्डियन ०६

1
@ gardian06: यह एक त्वरित लिखित अवलोकन है, यकीन है कि इसे काफी विस्तारित किया जा सकता है। मैं उदाहरण के लिए, सो रही वस्तु का उल्लेख करना भूल गया, जो बहुत उपयोगी है। पुनरावृत्तियों के लिए, मैं जोड़े के सभी संग्रहों पर पुनरावृति करता हूं, और यहां तक ​​कि अपेक्षाकृत बड़े पुनरावृत्तियों की गणना (20+) के साथ मैंने कभी भी प्रदर्शन समस्या पर ध्यान नहीं दिया है (लेकिन फिर से, यह ऑब्जेक्ट सो रहा है, इसलिए अपेक्षाकृत कम संख्या में सक्रिय टकरावों को हल करने के लिए )।
सीन मिडिलडच

1
शानदार जवाब, +1। इसे पढ़ना वास्तव में मुझे इन एल्गोरिदम को लागू करना चाहता है।
मील्स राउत

3

सामान्य समस्या: यह निर्धारित करें कि वस्तुओं के सभी संभावित संयोजनों में से एक गैर-अक्षीय अंतर खंड क्या है।

भोली, सामान्य दृष्टिकोण सरल है: प्रत्येक संभावित जोड़ी के लिए, प्रतिच्छेद की मात्रा की गणना करें। यह आमतौर पर व्यावहारिक नहीं है, क्योंकि इसके लिए ओ (एन ^ 2) की आवश्यकता होती है, अपेक्षाकृत महंगा अंतर ऑपरेशन।

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


2

एक "टक्कर इंजन" मैंने इस्तेमाल किया, जिसे समझना बहुत आसान था।

मूल रूप से, एपीआई ने एक तरह की वस्तुएं प्रदान कीं collidesWith, जैसे कि

  1. इसके पैरामीटर विभिन्न प्रकार के ऑब्जेक्ट थे जो टकराव के लिए "पात्र" थे
  2. टकराव हुआ या नहीं, इसके आधार पर यह सही या गलत निकला
  3. एक विकल्प चुनने की अनुमति थी कि क्या वस्तुओं के लिए सभी बाउंडिंग आयतें टकराव की घटना को ट्रिगर करती हैं या इन आयतों के भीतर केवल अपारदर्शी पिक्सेल (पिक्सेल-स्तरीय पहचान)

मेरे आवेदन में, मैंने बस समय-समय पर collidesWithयह पता लगाने के लिए आह्वान किया कि क्या टक्कर हुई या नहीं।

बहुत आसान है ना?


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

आम तौर पर, जब आपको पता चलता है कि एकल टकराव आयत वह नहीं करता है जिसकी आपको आवश्यकता है, तो आप चीजों को अधिक आयताकार उप-तत्वों में विघटित करने का एक तरीका खोजते हैं ताकि जब संयुक्त हो, तो ये तत्व वांछित व्यवहार का अनुकरण / अनुमानित करें।

  • अंतिम उपयोगकर्ता केवल इस बात की परवाह नहीं करते हैं कि दृश्य के पीछे कितनी वस्तुएं हैं। वे तब तक खुश रहते हैं जब तक अंतिम परिणाम के बारे में लगता है कि वे उम्मीद करते हैं, जैसे कि एक घर जिसके चारों ओर एक पिछवाड़े की बाड़ है:

    http://i.stack.imgur.com/4Wn5B.jpg


2

मुझे लगता है कि आप जिस चीज के बारे में बात कर रहे हैं, उस पर थोड़ा भ्रमित हैं, और कुछ अलग चीजों के बारे में बात कर रहे हैं।

यह कहने की क्षमता कि यह आइटम स्थान X से स्थान Y पर स्थानांतरित कर दिया गया है, भौतिकी पर आधारित है (यह भी हमला करता है कि वे कैसे चलते हैं, और वे संकेत देते हैं)

टक्कर का पता लगाने के लिए जिस विधि का उपयोग किया जाता है, वह आपके खेल की संरचना के आधार पर निर्धारित की जाती है। यदि आपका खेल एक बड़ी खुली दुनिया है, तो आपको अंतरिक्ष विभाजन पर विचार करना चाहिए (3 डी के लिए क्वाड-ट्री [ऑक्ट-ट्री], बीएसपी, एक पारंपरिक ग्रिड, या पुराने जमाने का परीक्षण सब कुछ दृष्टिकोण)

टक्कर का पता लगाने की प्रणाली को लागू करने का सबसे अच्छा तरीका चरणों में ऐसा करना है।

  1. सभी वस्तुओं को एक सामान्य बाउंडिंग वॉल्यूम / आकार में रखें, और फिर उन का परीक्षण करें

  2. यदि 1 पास हो गया है तो निरपेक्ष ज्यामिति का परीक्षण करने के लिए तैयार होने तक अधिक जटिल मात्रा / आकार दोहराने के साथ दोहराएं

  3. निरपेक्ष ज्यामिति का परीक्षण करें जब आप चरण 2 को दोहराते हैं, तो यह निर्धारित किया जाना चाहिए कि आपकी आकृतियों की जटिलता कितनी है और वे कितनी सही हैं।

आपको इनमें से प्रत्येक चरण पर जल्दी आउट होने के बारे में विचार करना चाहिए, और टकराव को खत्म करने के उद्देश्य से जाना चाहिए, और केवल चरण 3 पर सच लौटना चाहिए यदि वे वास्तव में छू रहे हैं।

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

पारंपरिक लूप इस तरह दिखता है:

receive input
update physics
collision detection
collision resolution
render
repeat

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

अधिकांश गेम इंजन कई (सभी नहीं) मामलों में पूर्ण ज्यामिति का परीक्षण करते हैं। ऐसा करने के बिना भौतिकी की प्रतिक्रिया में बहुत स्पष्ट "गड़बड़" होगा। अधिकांश इंजनों में एक सरल व्यापक चरण (स्थानिक विभाजन), एक साधारण बाउंडिंग वॉल्यूम परीक्षण (AABB सबसे अधिक सामान्यतः) होगा, और फिर (जब आवश्यक हो) एक सरलीकृत ज्यामिति परीक्षण (उदाहरण के लिए, पूर्ण-LOD) ज्यामिति के समान ज्यामिति नहीं, लेकिन अभी भी कच्चे ज्यामिति जो संभवतः प्रदान किए गए जाल के कम LOD संस्करणों में से एक है)।
सीन मिडिलिचच

@seanmiddleditch जो मेरे इरादे से अधिक था कि एक अनुमान का परीक्षण किया जाएगा आमतौर पर अवतल बहुभुज / पॉलीहेड्रॉन के परीक्षण से बचने की कोशिश की जाती है।
गार्डियन ०६

@ktodisco यह आंकड़ा की समयावधि पर निर्भर करता है, और इसे कितना सटीक होना चाहिए, और फिर टकराव को हल करने के लिए भौतिकी प्रणाली के लिए क्या लौटाया जाना चाहिए क्योंकि यह भौतिकी इंजन के आधार पर अलग-अलग हो सकता है, और इच्छित सटीकता। प्रतिक्रिया
गार्डियन ०६

@ guardian06 seanmiddleditch की व्याख्या बहुत अधिक व्यवहार्य है, हालांकि हजारों बहुभुजों से बने पात्रों के बीच निरपेक्ष चौराहों के लिए परीक्षण अभी भी एक अच्छा विचार नहीं है।
केविंटोडिस्को

1

ग्राफिक्स-कार्ड स्तर पर (जहां आप आमतौर पर त्रिकोणों के साथ काम कर रहे होते हैं), सामान्य विचार यह है कि किसी तरह से अपने दृश्य को विभाजित करें ताकि आपको सभी एन त्रिकोणों की जांच न करनी पड़े (यह पूर्व-प्रसंस्करण कदम के रूप में किया जा सकता है ), और फिर यह पता लगाएं कि आप उस दृश्य में कहां हैं और उस विभाजन में केवल 10-50 त्रिकोण की जांच करें।

अधिक जानकारी के लिए बीएसपी और केडी के पेड़ देखें। अन्य विभाजन दृष्टिकोण भी हैं।


0

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

दूसरे, लेकिन यह भी महत्वपूर्ण है, कि पहले चरण में शेष वस्तुओं के खिलाफ अधिक विस्तृत (सटीक) फैशन की जांच करें।

तीसरा, चेक करने के लिए सबसे कुशल / उपयुक्त तरीकों का उपयोग करें।

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