2008-10-06 31 views
8

क्या कोई इसके पेशेवरों और विपक्ष और इसके साथ जुड़े किसी भी गणित को समझा सकता है?क्या कोई प्रति-पिक्सेल टकराव का पता लगा सकता है?

+0

2 डी/3 डी पर स्पष्टीकरण और कुछ उदाहरण या अधिक जानकारी मेरे और दूसरों को प्रश्न का उत्तर देने के तरीके के साथ चलती है। – SCdF

+0

मैं दूसरा, कृपया स्पष्टीकरण दें। –

उत्तर

2

यह कशेरुक (या हिट-बक्से इत्यादि) से अधिक सटीक है। मुझे लगता है कि आप यहां 2 डी के बारे में बात कर रहे हैं (3 डी बॉक्स-मॉडल बनाम वर्टेक्स होगा)। प्रति-पिक्सेल आपको विस्तृत स्प्राइट्स की अनुमति देगा जो छोटी चीजें (मिसाइलें, कहें) अधिक वास्तविकता से टकराएंगी।

यह परंपरागत विधि से अधिक गणित और धीमी है, जो एक बॉक्स (या किसी अन्य आसानी से गणित की तरह गणित के आकार) को आकर्षित करना होगा और कहें कि 'यह अभिनेता है, यहां कुछ भी है'। हालांकि, यह अधिक सटीक है।

10

2 डी: के लिए आपको इस समस्या के लिए किसी भी गणित की आवश्यकता नहीं है, आपको केवल एक कस्टम बिटब्लिट-रूटीन की आवश्यकता है। आप टकराव के उम्मीदवारों को इस सतह पर अपने टकरावमास्कों को चित्रित करके छिपे हुए सतह में फिसल देंगे और जांच कर सकते हैं, यदि पिक्सल जिन्हें आप अभी आकर्षित करना चाहते हैं (पिक्सेल! = 0) हैं। तो आप एक टकराव होगा। बेशक, अगर टकराव हो सकता है तो आपको आयतों को बाध्य करके प्रीकेक करना चाहिए।

3 डी के लिए: आपको गणित की आवश्यकता होगी (बहुत कुछ)!

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

0

पेशेवरों पहले ही उल्लेख किया गया है: यह पिक्सेल सही और निष्पक्ष, वहाँ कोई गलत परिणामों की है और न ही मिथ्या नकारात्मक कर रहे हैं। मुख्य नुकसान यह है कि गणना करना महंगा है, लेकिन यदि आप पहले एक सरल बाउंडिंग बॉक्स चेक करते हैं, तो यह एक बड़ी समस्या नहीं होनी चाहिए। ओपनजीएल और डायरेक्टएक्स की उम्र में एक और समस्या है: स्प्राइट डेटा आमतौर पर बनावट होते हैं, जिसका अर्थ है कि वे वीआरएएम में हैं और आप आसानी से पिक्सेल मानों की जांच नहीं कर सकते हैं। ओपनजीएल में आप glReadPixels फ़ंक्शन का उपयोग दो स्प्राइट्स के छेड़छाड़ वाले हिस्से को रैम पर वापस लाने के लिए कर सकते हैं और टकराव की जांच कर सकते हैं, या आप occlusion query का उपयोग कर सकते हैं। प्रलोभन क्वेरी दृष्टिकोण में बेहतर प्रदर्शन होना चाहिए, क्योंकि आप GPU से डेटा वापस नहीं ले जा रहे हैं, लेकिन ऑक्लुजन क्वेरी हर जगह समर्थित नहीं हैं (यानी वे ओपनजीएल ईएस में समर्थित नहीं हैं, अगर कोई गलत है तो कृपया मुझे सही करें)।

2

पेशेवरों और विपक्ष की बात करते समय आपको टक्कर प्रतिक्रिया पर विचार करना होगा। टक्कर का पता चलने पर आप क्या करना चाहते हैं? यदि आप किसी ऑब्जेक्ट को किसी अन्य ऑब्जेक्ट पर मारने वाले ऑब्जेक्ट का पता लगा रहे हैं जहां परिणाम एक या दोनों ऑब्जेक्ट्स नष्ट हो रहा है, तो प्रति-पिक्सेल टकराव का पता लगाना अच्छा और सटीक है। यदि आप ऑब्जेक्ट को किसी अन्य तरीके से प्रतिक्रिया देना चाहते हैं, यानी दीवार, बाउंसिंग इत्यादि के खिलाफ स्लाइडिंग करना ... तो आप किसी प्रकार के बाध्य आयताकार/सर्कल/अंडाकार के साथ काम करना चाहेंगे जो टक्कर प्रतिक्रिया को चिकनी और अधिक लग जाएगा लगातार अटकने की संभावना कम है।

+0

एक फ्लैश स्टैंडपॉइंट से, क्या यह अभी भी महंगा है ?? GetPixel32 जैसे कुछ का उपयोग करके ?? – numerical25

0

ओपनजीएल और बनावट-केस के बारे में लेते हुए: आप छवि के लिए थोड़ा मैट्रिक्स सटीक कर सकते हैं और परीक्षण कर सकते हैं कि दो पिक्सल ओवरलैपिंग हो रहे हैं या नहीं।

0

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

6

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

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

  • छवि आधारित
  • सरल ज्यामितीय आकार (अक्ष गठबंधन बाउंडिंग बॉक्स, वृत्त)
  • परिसर ज्यामितीय आकार (उत्तल बहुभुज, convave बहुभुज:

    2 डी के लिए, वहाँ आम तौर पर 3 विभिन्न विकल्प हैं , इलिप्स, इत्यादि)

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

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

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

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

3 डी के लिए, विकल्प और फायदे कुछ इसी तरह कर रहे हैं:

  • वॉल्यूम आधारित
  • सरल ज्यामितीय आकार (अक्ष गठबंधन बाउंडिंग बॉक्स, वृत्त)
  • परिसर ज्यामितीय आकार (उत्तल बहुभुज, convave बहुभुज, अंडाकार, आदि)

यह ध्यान दिया जाना चाहिए कि पीटर पार्कर का जवाब 3 डी के लिए गलत है; 2 डी में पिक्सेल (चित्र तत्व) 3 डी में voxels (वॉल्यूम तत्व) के अनुरूप है।

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

वॉल्यूम-आधारित टकराव का पता लगाने के साथ टकराव का पता लगाने के उदाहरणों के लिए, उदाहरण के लिए Volumetric collision detection for deformable objects देखें, जहां ज्यामितीय आकारों के बजाय वॉल्यूम्स का उपयोग इसका अर्थ है कि वे मनमाने ढंग से आकार, बंद सतहों के साथ विकृत टकराव वस्तुओं को संभाल सकते हैं।

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

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