2D कठोर-पिंड टक्कर समाधान
समस्या की परिभाषा
- Mario का बादलों पर पैर रखना से लेकर racing game में दो कारों के टकराने तक, टक्कर को संभालना ज़्यादातर video games का बहुत महत्वपूर्ण हिस्सा है।
- इस blog series में हम physics simulation के असली गणित और physics पर बात करेंगे।
- video games इन concepts को संदर्भ में समझाने और कम abstract बनाने का एक अच्छा तरीका हैं।
गणित पर एक बात
- इस लेख में गणित काफ़ी आएगा, लेकिन हम सलाह देते हैं कि आप गणित से डरें नहीं।
- mathematical notation जटिल दिख सकती है, लेकिन उसका ज़्यादातर हिस्सा साधारण arithmetic है।
- गणित से घबराने के बजाय उसे समझने की कोशिश करने की सलाह दी जाती है।
शुरू करने से पहले
कठोर-पिंड
- कठोर-पिंड physics ऐसी physics simulation है जो उन वस्तुओं से संबंधित है जो विकृत नहीं होतीं।
- वास्तविक दुनिया में हर वस्तु molecular स्तर पर विकृत होती है, लेकिन simulation में इसे सरल बनाकर कठोर-पिंड माना जाता है।
टक्कर पता लगाना और टक्कर समाधान
- टक्कर पता लगाना वह प्रक्रिया है जिसमें देखा जाता है कि scene में कौन-सी वस्तुएँ टकरा रही हैं।
- टक्कर समाधान वह प्रक्रिया है जिसमें तय किया जाता है कि टकराने वाली वस्तुओं को कैसे चलना चाहिए।
- इस blog series में हम collision resolution चरण पर ध्यान केंद्रित करेंगे।
हम क्या करने वाले हैं?
- अधिकांश games एक बड़े loop के भीतर चलते हैं।
- game loop की हर iteration में वस्तुओं की position उनकी current velocity के अनुसार update होती है।
- velocity एक vector है जिसके पास magnitude और direction दोनों होते हैं।
वेग
- velocity किसी निश्चित समय के दौरान वस्तु की position में बदलाव को दर्शाती है।
- वस्तु की नई position, current velocity और time interval के गुणन से मिलने वाले displacement को जोड़कर निकाली जाती है।
टक्कर समाधान
- collision resolution का लक्ष्य टक्कर के बाद वस्तुओं की velocity बदलना है ताकि वे एक-दूसरे के भीतर घुसी न रहें।
- टक्कर के बाद की velocity को, टक्कर से पहले की velocity और टक्कर से होने वाले velocity change के योग के रूप में व्यक्त किया जा सकता है।
टक्कर क्या है?
- यह जाँचने के लिए कि दो वस्तुएँ टक्कर में हैं या नहीं, दो शर्तें पूरी होनी चाहिए:
- वस्तुओं के geometric आकार संपर्क में हों या एक-दूसरे पर overlap कर रहे हों।
- वस्तुएँ अभी भी टक्कर की दिशा में बढ़ रही हों।
सतह normal
- किसी वस्तु को सतह से सबसे अधिक दूर ले जाने के लिए उसे सतह के लंबवत दिशा में ले जाना चाहिए।
- इस दिशा को normal direction कहा जाता है, और यह सतह के लंबवत होती है।
dot product
- यह गणना करने के लिए कि दो vectors कितनी हद तक एक ही दिशा में इशारा करते हैं, dot product का उपयोग किया जाता है।
- dot product को दो vectors के corresponding elements के गुणनफल के योग के रूप में परिभाषित किया जाता है।
- dot product के sign से यह जाना जा सकता है कि दो vectors एक ही दिशा में हैं या विपरीत दिशा में।
निष्कर्ष
- टक्कर तब होती है जब एक वस्तु का कोई बिंदु दूसरी वस्तु के किसी बिंदु के संपर्क में हो और relative normal velocity ऋणात्मक हो।
- अगले लेख में हम टक्कर की वास्तविक physics पर चर्चा करेंगे।
GN⁺ की राय
- physics simulation का महत्व: game development में physics simulation यथार्थवाद बढ़ाने वाला एक महत्वपूर्ण तत्व है।
- गणित की भूमिका: गणित physics simulation का मूल है, और इसे समझने से बेहतर simulations बनाए जा सकते हैं।
- collision resolution की जटिलता: collision resolution केवल वस्तुओं की position update करने से कहीं अधिक जटिल प्रक्रिया है।
- शैक्षिक मूल्य: यह लेख physics simulation की बुनियाद समझने में बहुत मदद करता है।
- अतिरिक्त अध्ययन: physics engine को स्वयं implement करना भी सीखने का अच्छा तरीका है। Box2D या Chipmunk जैसे open source physics engines का संदर्भ लिया जा सकता है।
1 टिप्पणियां
Hacker News राय
Hacker News टिप्पणियों का संक्षिप्त सार
Hey everyone, author here!
Oh! Look, a well-researched, deeply-explained, and interactive post.
One side project I am working on right now is a 2d space shooter I am developing with my son.
I always enjoyed the explanation from the N game: N game tutorial
I had fun building a TypeScript demo about this topic, involving balls that can bounce and collide. I learned a lot.
This is great. This reminds me of Chris Hecker's Rigid Body Dynamics series from GDMag/Gamasutra that I read (checks watch) almost 30 years ago!
Collisions are violations of the pairwise non-intersection constraint between bodies.
If you want to go further and go for rigid body dynamics and constraint, I found that series of blog post very useful: Toptal blog post
To dredge up a related oldie-but-goodie memory of blog posts: Gaffer on Games
Guess this is a Shameless plug but I wrote an interesting program over 12 years ago using even then very old three Js which is not quite the metal but much less abstract than today's tools.