मैं अपने खेल में बुलेट भौतिकी को कैसे एकीकृत करूं?


12

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

संपादित करें - मुझे एहसास हुआ कि वास्तव में क्यूबॉइड्स में एएबीबी उनके साथ जुड़ा हुआ है। मुझे लगता है कि मुझे कम से कम बदलना पड़ेगा।

मुझे किन चरणों का पालन करने की आवश्यकता है?


2
क्या आप अध्याय के तहत मैनुअल में एक नज़र डालते हैं 4.4 Integration overviewमुझे पता है कि यह बहुत संयमी है लेकिन यह मूल प्रक्रिया का वर्णन करता है। इसलिए यदि आप उस उदाहरण और उदाहरण डेमो के कोड को देखते हैं तो आपको बहुत अधिक समस्याएं नहीं होनी चाहिए।
पीटरटेड

बुलेट फोल्डर में उदाहरणों को भी देखें
बजे

@MaikSemder मैं निश्चित नहीं था कि विशिष्ट लोगों को कैसे खोला जाए। क्या फाइल को केवल लिनक्स बनाया जाता है?
सिरयाकोट

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

यह इस बात पर निर्भर करता है कि आप किस मंच पर हैं। खिड़कियों पर दृश्य स्टूडियो के लिए उदाहरणों के लिए एक .sln फ़ाइल है, मुझे लगता है कि आप क्या उपयोग करते हैं। बस बुलेट फ़ोल्डर में sln फ़ाइल खोजें।
माईक सेमर

जवाबों:


21

यहां उन मूल चरणों की आवश्यकता है जिन्हें आपको फ़ॉलोव करना होगा:

  1. अपने भौतिकी सिमुलेशन को चलाने के लिए पहले एक विश्व ऑब्जेक्ट (यानी btDiscreteDynamicsWorld) बनाएं

  2. आपके पास पहले से ही एक वर्ग होना चाहिए जैसे GameObjectकि शायद दुनिया में अपने बाउंडिंग बॉक्स और स्थिति / अभिविन्यास के साथ एक मॉडल संग्रहीत करता है। बदलें स्थिति / उन्मुखीकरण जानकारी के साथ एक भौतिक विज्ञान का एक उदाहरण शरीर वस्तु (यानी btRigidBody) और जब मॉडल प्रतिपादन, यह भी शरीर द्वारा दी गई जानकारी का उपयोग करें। बॉडी बनाते समय आपको इसके द्रव्यमान और टकराव की आकृति प्रदान करनी होगी जो कि आपके पास पहले से मौजूद बाउंडिंग वॉल्यूम से मेल खाए। मैंने आपके अन्य प्रश्न में भी इस बारे में बात की है।

  3. जोड़ें अपने खेल वस्तु के प्रत्येक दुनिया के लिए शरीर वस्तु।

  4. दुनिया को आगे बढ़ाकर (यानी stepSimulationअपनी दुनिया को बुलाकर ) सिमुलेशन को अपडेट करें

और मैनुअल पढ़ने के लिए कुछ समय निकालें क्योंकि इसमें बहुत सारी जानकारी भी है।


टिप्पणी को संबोधित करने के लिए संपादित करें

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

खैर, यह आपकी टिप्पणी से प्रकट होगा कि आपने पहले कभी भी बाहरी C ++ पुस्तकालयों के साथ काम नहीं किया है। जब से मैंने ऐसा किया है, तब से कुछ समय हो गया है, लेकिन यह है कि मुझे (विजुअल स्टूडियो में) होने की प्रक्रिया याद है।

शुरुआत के लिए मैं मैनुअल को उद्धृत करता हूं जो पहले से ही बताता है कि आपको क्या चाहिए:

- #include btBulletDynamicsCommon.h in your source file 
- Required include path: Bullet/src folder 
- Required libraries: BulletDynamics, BulletCollision, LinearMath

और यहां ऊपर दिए गए शर्तों को पूरा करने के लिए आपको मूल चरणों का पालन करना होगा ...

1. तैयारी कदम

सबसे पहले, एक ज्ञात निर्देशिका में आपके द्वारा डाउनलोड की गई फ़ाइल को निकालें, जैसे C:\Bullet। आपको बाद में इस फ़ोल्डर का पथ जानना होगा।

अंदर दो फ़ोल्डर हैं जिन्हें आपको अपनी परियोजना में संदर्भित करना होगा। पहला वह srcफ़ोल्डर है जो .hहेडर फ़ाइलों को रखता है जिन्हें आप अपने स्रोत कोड में शामिल करेंगे । दूसरा वह libफ़ोल्डर है जो .libलाइब्रेरी फ़ाइलों को रखेगा जो आप अपने प्रोजेक्ट से लिंक करेंगे । ध्यान दें कि इसमें शामिल और लिंक करना दो अलग-अलग चीजें हैं।

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

आपके सफल होने के बाद, आपके पास libफ़ोल्डर में कम से कम तीन फाइलें होनी चाहिए : और BulletDynamics.lib, (मैं मैनुअल से अनुमान लगा रहा हूं)। अब बुलेट और अपने प्रोजेक्ट के बीच संबंध बनाने के लिए ...BulletCollision.libLinearMath.lib

2. हेडर्स शामिल करें

सबसे पहले, आपको C:\Bullet\srcअपने प्रोजेक्ट के शामिल पथ विकल्पों में फ़ोल्डर को जोड़ना होगा । आप अपने प्रोजेक्ट पर राइट-क्लिक करके, Configuration Properties -> C/C++ -> General -> Additional Include Directoriesवहां मौजूद डायरेक्टरी पाथ को राइट-क्लिक करके विजुअल स्टूडियो में ऐसा कर सकते हैं ।

इसे स्थापित करने के बाद, आप बस #include “btBulletDynamicsCommon.h”अपने कोड पर कर सकते हैं । यह हेडर उन सभी सुविधाओं के लिए एक हब के रूप में काम करता है जिनकी आपको आवश्यकता है।

3. लिंक लाइब्रेरी

अंत में आपको ऊपर बताए गए पुस्तकालयों को लिंक करना होगा। मुट्ठी, फ़ोल्डर में, या दूसरे शब्दों में, Configuration Properties -> Linker -> General -> Additional Library Directoriesपथ जोड़ने के तहत ।libC:\Bullet\lib

फिर, के तहत Configuration Properties -> Linker -> Input-> Additional Dependencies, पुस्तकालयों का नाम निर्भरता की सूची में जोड़ें। प्रत्येक लाइब्रेरी को एक से अलग करें ;और फ़ाइल एक्सटेंशन को न भूलें। उदाहरण के लिए, आप इसे सूची के अंत में जोड़ सकते हैंBulletDynamics.lib;BulletCollision.lib;LinearMath.lib :।

इसके बाद आपको अपनी परियोजना बनाने और चलाने में सक्षम होना चाहिए।


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

@AsherEinhorn मेरा संपादन जांचें
डेविड गॉविया

@AsherEinhorn कोई समस्या नहीं है, इसने मुझे पहली बार सी ++ लाइब्रेरीज़ के साथ कुछ साल पहले काम किया था।
डेविड गौवेया

हाँ, यह उन चीज़ों में से एक है, जिन्हें मैंने अभी तक टाल दिया है, मेरे खेल में सभी कोड मेरे हैं, लेकिन अपने स्वयं के भौतिकी इंजन को लिखने की कोशिश करना सिर्फ समय की बर्बादी है जब अन्य लोगों ने मुझे उनसे बेहतर किया है। शायद कभी होगा।
सिरयाकोट

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