2016-10-16 10 views
12

मैं नरम निकायों को बनाने के प्रयास में मैटर.जेएस भौतिकी का उपयोग कर रहा हूं। मैं इस तरह के शरीर बनाने के लिए कर रहा था:2 डी मुलायम निकायों: गैली और मोल्डबल?

matter.js soft body

हालांकि मुझे यकीन है कि अगर यह "सॉफ्ट शरीर" है नहीं कर रहा हूँ मैं चाहता हूँ। यह सच है कि यह शरीर पूरी तरह से कठोर नहीं है और जब वह टकराता है और खींच लिया जाता है तो उछाल महसूस होता है। मैं ऐसे शरीर की तलाश में था जो एक जेली के साथ समानता साझा करता है। इस छवि को नेत्रहीन अवधारणा को समझाने में मदद कर सकता है:

wanted-gelly-body

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

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

कोई फर्क नहीं पड़ता.जेएस इसे संभालते हैं या क्या मुझे भौतिकी इंजन को बदलना है? इस दृष्टिकोण के लिए कोई समाधान?

नोट: मैं कुछ इन-गेम घटकों के लिए Phaser.js का उपयोग कर रहा हूं लेकिन भौतिकी हेरफेर के लिए पदार्थ.जेएस भौतिकी क्योंकि मेरा मानना ​​है कि फ़ेसर एकीकृत भौतिकी इस प्रकार के जटिल शरीर को अनुकरण नहीं कर सकती है।

धन्यवाद

संपादित करें: यह बहुत ही इस Box2d :roll soft body ball के समान है। मुझे बस एक जेएस इंजन के साथ ऐसा करने की ज़रूरत है। क्या वहाँ कोई?

+2

आपको इस मामले का उपयोग करने के लिए इस्तेमाल किए गए पदार्थ.जेएस कोड में जोड़ना चाहिए, ताकि अगर कोई यह जान सके कि इसे जिस तरह से आप चाहते हैं उससे व्यवहार करने के लिए इसे ट्विक करना है, तो वे उस जानकारी को प्रदान करने में सक्षम होंगे। वर्तमान में सवाल बहुत व्यापक है और कोड प्रदान न करने के लिए वोट कम करने की संभावना है। ऐसा हो सकता है कि जो कोई जानता है वह आपके कोड को देखेगा और आप क्या करने की कोशिश कर रहे हैं और पुष्टि करें कि matter.js काम नहीं करेगा, लेकिन इसे डाले बिना, लोगों को मदद करने की भी कम संभावना है। – Rodger

+0

@ रोडर मैं आपके लिए असली से सहमत हूं। यह सिर्फ इतना है कि मैंने जो किया वह कर रहा है, यह केवल एक नए प्रकार का शरीर बना रहा है जिसे पहले से ही matter.js द्वारा परिभाषित किया गया है। मुझे नहीं लगता था कि यह बहुत प्रासंगिक था –

+0

एक बार मेरे दोस्त ने छवि में एक जेली बना दिया, उसने नोड्स के साथ एक गोलाकार संरचना बनाई और अंदर वह अलग वस्तुओं से भर गया और वस्तुओं को खाली जगह पर रख दिया। अंगूठी जिसमें वस्तुओं को शामिल किया गया था, कुछ लोच था इसलिए इसका रूप आसानी से बदल जाएगा। मुझे Matter.js के बारे में पता नहीं है, लेकिन मुझे लगता है कि आप कुछ ऐसा ही कर सकते हैं। –

उत्तर

4

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


मैं इस जवाब देने की कोशिश करेंगे:

मैं सोच रहा था कि कैसे शरीर के इन प्रकार के बनाया जा सकता है। ... मैं केवल शरीर को कठोर-वर्ग के रूप में प्राप्त कर सकता हूं, न कि मोल्डबल और सर्कुलर जैसा कि मैं चाहता हूं।

यह स्पष्ट नहीं है कि आप यह वाक्य क्या चाहते हैं। जैसा कि मैंने टिप्पणियों में उल्लेख किया है, मुझे लगता है कि आप plasticity के लिए देख रहे हैं, और मैं एक ऐसे तरीके का वर्णन करूंगा जो आप संभवतः "चीट" को संभवतः कुछ सरल टूल के साथ देख सकें।

इस समय आप अपने शरीर की गति का वर्णन करते हैं "यह सच है कि यह शरीर पूरी तरह से कठोर नहीं है और जब यह टकराता है और खींचता है तो उछाल महसूस होता है।"। वर्तमान में आपका मॉडल इस प्रकार काम करता है:

  1. एक बिंदु आपके जाल में दिए गए सभी अन्य बिंदुओं से जुड़ा हुआ है।
  2. प्रत्येक बार चरण, प्रत्येक जोड़ी के बीच एक बल की गणना की जाती है। संयुक्त (या बिंदु) पर कुल बल इन सभी जोड़ी बुद्धिमान बलों का योग है।
  3. प्रत्येक संयुक्त शरीर के एक हिस्से से जुड़ा हुआ है (यानी इसमें कुछ द्रव्यमान m है) और आप acceleration = force/m के साथ इसके त्वरण की गणना करते हैं। वहां से हम velocity और अंत में position की गणना करते हैं।

ऊपर दिए गए चरणों का सबसे दिलचस्प हिस्सा एनआर 2 है, क्योंकि यह पूरे शरीर की गति को बहुत प्रभावित करेगा। इसे लागू करने का एक बहुत ही आम तरीका लोचदार क्षमता है कि एक निश्चित distance के लिए दो बिंदुओं के बीच कुछ force देता है। इस तरह:

function elasticPotential(p1, p2) { 
    // Given two positions p1 and p2 we calculate a force between them 
    distance = sqrt(pow(p1.x - p2.x, 2) + pow(p1.y - p2.y, 2) + pow(p1.z - p2.z, 2)); 
    force = force_given_distance(distance); // A popular choice here is for example a spring force 
    return force; 
} 

अब, आपके पास पहले से ही आपके ढांचे में निर्मित ऊपर वर्णित फ़ंक्शन है, इसलिए आपको इसे लागू करने की आवश्यकता नहीं है। इसका कारण यह है कि मैं इसका वर्णन कर रहा हूं क्योंकि यह समझना आवश्यक है कि हम कैसे प्लास्टिक बना सकते हैं। उपरोक्त के साथ समस्या यह है कि विरूपण को बनाए रखने के लिए --- लोचदार क्षमता की प्रकृति यह है कि इसमें बाकी कॉन्फ़िगरेशन (संभवतः आपकी पहली कॉन्फ़िगरेशन) है और यह हमेशा उस आकार पर वापस आने का प्रयास करेगा। हम चाहते हैं कि आकार याद रखें कि यह गलत आकार का था। यही प्लास्टिक है।

सरल प्लास्टिसिटी

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

for each pair(p1, p2): 
    if distance(p1, p2) > threshold: 
     recalculate_connection(p1, p2) 

जैसा कि आप देख सकते हैं कि यह प्लास्टिक के लिए एक बहुत ही सरल मॉडल है, और संभवतः शारीरिक रूप से सही नहीं है। हालांकि, आपके द्वारा चुने गए लोचदार क्षमता के साथ रीमेशिंग के साथ खेलने के दिलचस्प व्यवहारों को प्राप्त करना संभव होना चाहिए।

यदि आप मुझे अधिक जानकारी प्रदान करते हैं तो मैं समस्या पर आगे चर्चा करने में सक्षम हो सकता हूं, लेकिन अभी मुझे लगता है कि यह उत्तर पहले से ही लंबा होना चाहिए।


टी एल; डॉ: विरूपण के दौरान अपने शरीर remeshing द्वारा एक "moldable" आकार बनाएँ। सटीक वांछित शारीरिक व्यवहार प्राप्त करना मुश्किल हो सकता है, लेकिन ऐसा कुछ बनाना संभव है जो "जेली जैसी" दिखता हो।

संबंधित मुद्दे