C++

2010-07-16 15 views
8

गैर कठोर शारीरिक 2 डी भौतिकी इंजन मैं C++ 2 डी भौतिकी इंजन के साथ प्रयोग करने के लिए कोशिश कर रहा हूँ। अब तक, यह बॉक्स 2 डी सबसे लोकप्रिय लगता है। दुर्भाग्य से, Box2D कठोर बॉडी फिजिक्स इंजन है और यह वास्तव में मेरी मदद करने के लिए नहीं जा रहा है जो मैं कोशिश करना चाहता हूं।C++

मैं ऐसे आकार को परिभाषित करने में सक्षम होना चाहता हूं जिसमें स्प्रिंग्स द्वारा कई सारे शिखर सम्मिलित हों, जैसे कि जब यह आकार कठोर या अन्य गैर-कठोर आकार के साथ टकराता है तो इसका आकार लचीला होगा।

अब मैं केवल कठोर शरीर का उपयोग कर Box2D में यह करने के तरीके के बारे में सोच की कोशिश की है, लेकिन वहाँ हमेशा खामियों हो रहा है:

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

तो सी ++ में इस तरह के भौतिकी करने का सबसे अच्छा तरीका क्या है? एक संपूर्ण भौतिकी इंजन लिखने के बिना अधिमानतः। शायद मैं बस बॉक्स 2 डी की एक विशेषता खो रहा हूँ। शायद यह सिर्फ सही विकल्प नहीं है। तो सही विकल्प क्या है?

उत्तर

3

वहां कई पैकेज/इंजन हैं जो विकृत/नरम निकायों का समर्थन करते हैं। यदि आप कुछ मुफ्त चाहते हैं तो आप उदाहरण के लिए Phyz, SOFA या Bullet देखें।

wikipedia पर एक विस्तृत सूची नहीं है। इनमें से अधिकांश 3 डी-आधारित हैं लेकिन आप उन्हें एक विमान के रूप में दृश्य स्थापित करके 2 डी मॉडल में अनुकूलित कर सकते हैं।

हैप्पी कोडिंग!

0

मैं वास्तव में नहीं जानता कि सबसे अच्छा तरीका क्या है, लेकिन here, पेज के अंत के पास के लिए "स्प्रिंग्स" कोड है।

1

आप केवल विरूपण के लिए देख रहे हैं, मैं एक बहुभुज मॉडल (trimesh) जहाँ मैं दृढ़ पिण्ड कि कि आकार का प्रतिनिधित्व करता है के लिए टकराव कॉलबैक पकड़ उपयोग करने के लिए सुझाव है। टकराव बिंदु पर मैं एक या कई शीर्षकों के कारण विरूपण की मात्रा निर्धारित करता हूं।

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

यह तरीका लागू करना, हालांकि यह एक "सॉफ्ट शरीर" जो हो सकता है आप के लिए क्या देख रहे नहीं होगा काफी सरल हो जाएगा। http://chriscavanagh.wordpress.com/2008/06/24/silverlight-soft-body-physics/ एक कार्यान्वयन प्रतीत होता है जो स्रोत कोड देता है जिसे आप देखना चाहते हैं।

1

मुझे लगता है कि Dax Phyz में 2 डी और मुलायम निकाय हैं।