बहुत ही सरल 3 डी रेसिंग गेम्स में, टक्करों को कैसे नियंत्रित किया जाता है?


9

मैं सोच रहा था कि कुछ साधारण 3 डी कार रेसिंग गेम्स में कैसे टकराव होता है (विशेषकर आउट्रून 2 / मोटरसेर जैसे खेलों में)।

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

Outrun 2 / Motoracer जैसे गेम में, गेमप्ले इतनी सरल है कि डेवलपर्स को शायद इसकी आवश्यकता नहीं है और सब कुछ बहुत सरल हो सकता है। जो लोग इसे कभी नहीं खेलते हैं, उनके लिए यहाँ क्या विशिष्ट है:

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

यहां बताया गया है कि मुझे लगता है कि टक्कर (कैसे) की जा सकती है:

पूरे ट्रैक को विशाल 3 डी बेजियर वक्र माना जा सकता है। उस वक्र से, सड़क बहुभुज उत्पन्न हो सकते हैं (वक्र से उत्पन्न सामने, बाएं और ऊपर वैक्टर)। अन्य तत्वों (जैसे घर, पेड़, ...) को भी इस पद्धति का उपयोग करके रखा और संरेखित किया जा सकता है।

फिर, टक्करों को संभालने के लिए (और कार खींचना):

1) वर्तमान कार 3 डी स्थिति से 3 डी वक्र पर निकटतम स्थिति का पता लगाएं। दूसरे शब्दों में, 3 डी कार की स्थिति को बीज़ियर वक्र स्थिति में बदलना। सड़क पर हर 3 डी स्थिति को 3 डी वक्र ( t) + पार्श्व विस्थापन ( d) के साथ विस्थापन के रूप में माना जा सकता है । यदि यह स्पष्ट नहीं है तो नीचे दी गई छवि देखें (यह एक 2d उदाहरण है लेकिन यह आसानी से 3 डी पर लागू होता है)।

यहाँ छवि विवरण दर्ज करें

जब t = 0 कार ट्रैक सेक्शन की शुरुआत में हो, जब t = 1 कार अंत में हो। जब d = -1 या 1 कार ट्रैक की सीमा पर हो, जब d = 0 कार सड़क के बीच में हो

2) कार को सड़क का उपयोग करके संरेखित करें tऔर d(बहुत सरल: किसी भी मूल्य tऔर dमूल्यों के लिए मैं एक 3 डी स्थिति + ऊपर / सामने / बाएं डॉक्टर्स प्राप्त कर सकता हूं)। कार अब सड़क पर चिपकी हुई है

3) dकार के पार्श्व विस्थापन की जांच करें । अगर मूल्य बहुत बड़ा है (d > 1)या कम (d < -1)कार ट्रैक से दूर है। बस इसे सही जगह पर कार लगाने के लिए क्लिप करें।

यह भी 3 डी culling बहुत सरल है, बस वर्तमान कार की tस्थिति से ट्रैक आकर्षित करने के लिए t + some_big_enough_value_to_avoid_visible_clipping

या हो सकता है कि मैं पूरी तरह से गलत हूं: यह कार की टक्कर (एक बाउंडिंग बॉक्स) और पॉलीगनों का एक बहुत ही सरल सेट की जांच करने के लिए बहुत तेज और सरल होगा जो कि ट्रैक (इमारतों और इस तरह के बिना) का प्रतिनिधित्व करते हैं। 3 डी दुनिया (और परिणामस्वरूप कॉलिजन मॉडल) कुछ 3 पार्टी टूल (खेल को चलाने के दौरान कोई और 3 डी वक्र नहीं, सिर्फ पॉलीगनों का एक गुच्छा) का उपयोग करके, बस पहले उत्पन्न किया गया होगा।

जवाबों:


16

मैंने आपके द्वारा वर्णित कुछ व्यावसायिक खेलों पर काम किया है।

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

लेकिन इसके साथ ही, हमने यह भी किया कि आप क्या सोचते हैं कि मैं कैसे सोचता हूं कि टकराव टनलिंग / ग्लिट्स के खिलाफ गार्ड करने के लिए टकराव काम करेगा , और यह सिस्टम एआई लॉजिक को चलाने के लिए भी इस्तेमाल किया गया था। हमने यह भी निर्धारित करने के लिए इसका उपयोग किया कि कौन सी कारें अग्रणी थीं, ताकि हम HUD पर "1/2 / 3rd / etc" संकेतक प्रदर्शित कर सकें। कभी-कभी इस डेटा का इस्तेमाल किसी बड़ी दुर्घटना के बाद कार को सांस लेने के लिए भी किया जाता था।

एक टुकड़ा जो आपने मुझे याद दिलाया था कि मुझे लगता है कि टकराव कैसे काम करेगा , जब आप इस तरह से स्प्लिन के साथ काम कर रहे हैं, तो आप सामान्य रूप से स्प्लिन पसलियों को दे देंगे। पसलियां डेटा के बिट्स हैं जो यह दर्शाते हैं कि स्पलाइन से प्रत्येक दिशा में ट्रैक कितनी दूर तक फैला है। तो 100 मीटर लंबी एक तख़्ती के लिए, आपके पास 50 पसलियाँ हो सकती हैं, जो ट्रैक की चौड़ाई को हर दो मीटर की लंबाई के साथ देती है। यह आपके ट्रैक को इसकी सीमा के साथ चौड़ाई बदलने की अनुमति देता है। जिन खेलों में मैंने काम किया है, इन पसलियों ने "ट्रैक सरफेस" और "एक्सेलेबल एरिया" के बीच भी अंतर किया है। तो आपके पास सड़क की चौड़ाई का एक सेट होगा, जो यह बताएगा कि आपके पास कितनी अच्छी जगह है और आपके पास अच्छी टरमैक है, और फिर एक और चौड़ाई कहती है कि रेत / घास / जो भी उस से बाहर जाती है। आइए हम खिलाड़ियों को ट्रैक से एक उचित दूरी पर ड्राइव करने में सक्षम हैं, लेकिन अभी भी एआई को पता है कि वास्तविक सड़क की सतह कहां थी।

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

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

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


जानकारीपूर्ण और मजेदार जवाब पढ़ने के लिए
onedayitwillmake

0

मेरे ओपनर रेसर में, मैंने मूल रूप से ट्रैक की सीमाओं को परिभाषित करने के लिए दो हलकों का उपयोग करके शुरू किया था, लेकिन यह बहुत परेशानी की तरह लग रहा था। मैं सिर्फ पिक्सेल रंग पढ़ने के लिए glReadPixel का उपयोग करता हूं। यदि खिलाड़ियों की कार एक हरे (घास के रंग का) पिक्सेल से अधिक है, तो आंदोलन आगे सीमित है। प्रदर्शन पर बहुत कम प्रभाव पड़ता है।


ऐसा लगता है कि आप 2D गेम (पिक्सेल रंगों से टकराते हुए) का वर्णन करते हैं। ऐसा है क्या? फिर जवाब ऑफटॉप है।
क्रॉस्टर

मैं परिप्रेक्ष्य प्रक्षेपण में एक खेल की बात कर रहा हूं। glReadpixel 2d ऑर्थो या 3 डी परिप्रेक्ष्य मोड में लागू किया जा सकता है।
ztech79
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.