2012-09-10 14 views
6

मैं अपने खिलाड़ी को दीवारों के अंदर खड़े होने में सक्षम होना चाहता हूं। प्रत्येक गेम टिकता है मेरे खिलाड़ी कुछ छोटी दूरी और/या घूमता है।एक लोकी जाल के साथ टकराने

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

मेरे पास सामान्य किरण/त्रिभुज चौराहे कोड है।

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

आप कैसे कुशलता से निर्धारित करते हैं कि एक खिलाड़ी 3 डी वातावरण में दीवारों और बाधाओं के साथ कब और कहाँ टकराता है?

एक सामान्य दृष्टिकोण पास-मिस त्रिकोण कोड होगा, जहां किरण एक बॉल-कैप्ड सिलेंडर है।

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

enter image description here

प्रत्येक चेहरे मैं सतह गणना कर सकता है सामान्य के लिए; इस तरह मैं जानता हूं कि किस तरह से 'बाहर' है।

मेरा दिमागी तूफान मुझे प्रत्येक दूरी के सामान्य दूरी को निश्चित दूरी से गुणा करने और फिर संबंधित ऑफसेट के साथ त्रिकोण को उत्सर्जित करने की कल्पना करता है।

हालांकि यह किनारों पर छेद छोड़ देगा और शायद (?) कुछ किनारों को बहुत तंग तीव्र कोनों से गुज़रने का कारण बनता है?

मैं भी प्रत्येक किनारे में बॉल-एंड सिलेंडरों के रूप में शामिल होने की कल्पना कर सकता हूं।

उपरोक्त बैरल के लिए उपयोग किया जाने वाला दृष्टिकोण एक चरम साझा करने वाले सभी चेहरों के औसत सामान्य की गणना करना है और फिर टकराव त्रिज्या से गुणा करना है। यह तीव्र कोणों से अच्छी तरह से सामना नहीं करता है, और क्या करना है यदि वर्टेक्स विपरीत पक्षों के चेहरे के बीच गलत तरीके से साझा किया जाता है?

मैं जावक्रिप्ट में, इस जाल की गणना कर रहा हूं और फिर रे चौराहे का प्रदर्शन करूँगा। तो प्रदर्शन भी एक विचार है। टकराव का पता लगाने के लिए एक बहुत बढ़िया विस्तृत जाल महंगा होगा।

आप प्रभावी रूप से एक अच्छी तरह से पर्याप्त लोकी जाल की गणना कैसे कर सकते हैं? या लोकी-जागरूक अस्पष्ट त्रिभुज चौराहे करते हैं? या टकराव करने का कोई बेहतर तरीका है, और क्या यह किसी भी तरह मॉडल कर सकता है कि चीजें सीधे रेखाओं की बजाय आर्क में चली जाती हैं?

+0

क्या आपको वास्तव में विस्तारित जाल की आवश्यकता है? क्या आप मूल जाल का उपयोग नहीं कर सकते हैं, और टकराव से कम दूरी पर विचार कर सकते हैं (चौराहे के बजाय) टक्कर? –

+0

@ एनी-मूस मुझे त्रिकोण किनारों को याद करने वाली किरणों के साथ परेशानी थी लेकिन खिलाड़ी उनके माध्यम से गुज़र रहा था। आप पथ पर खिलाड़ी जाल और दीवार चौराहे कैसे कर सकते हैं? यह सब दुखद लगता है, दुख की बात है। – Will

+0

दृष्टिकोण जो मुझे पता है बस कंप्यूटिंग दूरी से काम करते हैं। यदि आपके मेहेस उत्तल हैं तो यह ऊर्ध्वाधर त्रिभुज दूरी की गणना करने के लिए ठीक होना चाहिए। और यदि आप खिलाड़ी को गोलाकार होने का मानते हैं, तो आपको केवल प्लेयरपॉइंट-त्रिकोण दूरी की गणना करने की आवश्यकता होगी, और दूरी से खिलाड़ी के आकार को घटाएं। –

उत्तर

0

(कोई भी बक्षीस नहीं उठाया :(Nathan Reed on gamedev.stackexchange शब्दावली के साथ मदद की। इसे कैप्सूल-त्रिकोण चौराहे कहा जाता है।)

इसकी आश्चर्यजनक रूप से मुश्किल गणित और गुगलिंग को प्रतिलिपि बनाने के लिए बहुत तैयार कोड नहीं मिलते हैं।

एक standard way, बाहर निकालना दायरे के आधार पर त्रिकोण है भी जोड़ का परीक्षण तीन त्रिकोण के प्रत्येक कैप्सूल के रूप में किनारों।

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

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

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

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

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