एक 2 डी isometric खेल में वास्तविक समय छाया कास्टिंग


15

मैं C ++ में एक छोटा 2d आइसोमेट्रिक इंजन लिख रहा हूं और रियल टाइम शैडो कास्टिंग लागू करने की कोशिश कर रहा हूं। मैंने इस पृष्ठ पर वर्णित एक सरल दृष्टिकोण का पालन किया और यहां परिणाम है (प्रकाश पीले घन की तुलना में उसी स्थिति में स्थित है):

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

परिणाम बहुत अच्छा है, लेकिन दीवारों पर और क्यूब्स के शीर्ष पर लापता छाया हैं। यहाँ एक उदाहरण है कि यह कैसा दिखना चाहिए (मैं हरे रंग में अपेक्षित छाया खींचता हूँ):

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

तैयार किए गए सभी क्यूब्स केवल XY स्थिति में और एक Z गहराई (z = x + y) के साथ स्थित 3 डी क्वैड से बने होते हैं। मैं ऑर्थोग्राफिक मैट्रिक्स (glOrtho) के साथ OpenGL का उपयोग करता हूं। स्टैंसिल बफर का उपयोग करके छाया खींचे जाते हैं।

मैं उन संसाधनों या समाधानों की तलाश कर रहा हूं जो मुझे इस छाया कास्टिंग कार्यान्वयन को पूरा करने में मदद करेंगे।

आपका बहुत बहुत धन्यवाद!


5
"इस पृष्ठ" के लिए आपका लिंक एक छवि की ओर इशारा कर रहा है न कि एक पृष्ठ की ओर। इसके अलावा, मैं यहां केवल अनुमान लगा रहा हूं, लेकिन 3 डी में उस समस्या को हल करना आसान हो सकता है और कैमरे को सिर्फ iमित्तिक रूप से प्रोजेक्ट कर सकता हूं।
टेट्राद

Oups, तुम सही हो, मैं लिंक तय की। यह निश्चित रूप से एक 3 डी प्रक्षेपण के साथ आसान होगा लेकिन 2 डी के अपने फायदे भी हैं और मुझे यकीन है कि 2 डी में इसे लागू करने के लिए समाधान है।
XPac27

जवाबों:


6

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

नोट: छत के लिए आपको छाया क्षेत्र और छत क्षेत्र को काटना होगा।


अच्छी सलाह के लिए धन्यवाद! यदि छाया खंडों की तुलना में अपने खंड के डॉट उत्पाद का उपयोग करके दीवारों की गणना की जानी चाहिए, तो इस दूसरी पास को अनुकूलित करने में सक्षम हो सकते हैं। मैं कोशिश करूँगा और अगर यह काम करता है तो वापस पोस्ट करें।
XPac27

यह एक समय हो गया है, लेकिन मैं अंत में इसे आपके सुझावों के लिए धन्यवाद काम करने के लिए मिला! मुझे केवल 2 ज्यामिति विधियों की आवश्यकता थी (यह जानने के लिए कि क्या एक बिंदु बहुभुज के भीतर है और एक दो खंडों के चौराहे को प्राप्त करने के लिए)। मुझे अभी भी छतों को संभालने की जरूरत है लेकिन यह करना आसान है। आप इस वीडियो पर परिणाम देख सकते हैं और यहां स्रोत कोड को देख सकते हैं (मैंने इस पर सिर्फ 1 दिन काम किया है ताकि इसे और अधिक अनुकूलित करना संभव हो सके)।
XPac27

@ XPac27 जो अद्भुत है। साझा करने के लिए धन्यवाद।
ashes999

0

मौलिक रूप से, आप जो खोज रहे हैं वह किया नहीं जा सकता है। आप 2 डी वस्तुओं का एक गुच्छा लेना चाहते हैं और उन्हें छाया डाला है जैसे कि वे 3 डी ऑब्जेक्ट हैं। यदि आप पूर्ण 3 डी छाया चाहते हैं, तो आपके पास 3 डी ऑब्जेक्ट होना चाहिए।


1
लेकिन यह सवाल में 3 डी छाया कास्टिंग की तरह नहीं है। कोई भी दीवार पूरी तरह से उस दिशा में दृष्टि की रेखा को अवरुद्ध करती है, आपके पास चर ऊंचाई की वस्तुएं नहीं हो सकती हैं।
युरिक्स

0

वर्णित समाधान पूर्ण 3 डी नहीं है क्योंकि उसे पूर्ण 3 डी समाधान की आवश्यकता नहीं है। ऐसा लगेगा लेकिन ऐसा नहीं है। छाया कास्टिंग के निर्माण को मात्रा के बीच के चौराहे के रूप में माना जाना चाहिए। उसे जो चाहिए वह कम जटिल है। याद रखें (यदि आपके पास बोना है) कयामत और कयामत प्रदान करना जैसे इंजन। सभी प्रसंस्करण दो आयामों पर किए गए थे।


0

यह देखते हुए कि आप चाहते हैं कि यह खेल छोटा हो, केवल इस बारे में क्या कहना है कि वर्तमान छाया कार्यान्वयन काफी अच्छा है?

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.