मैं नहीं जानता कि आप क्या प्रोग्रामिंग कर रहे हैं, लेकिन यह है कि मैंने इसे XNA में कैसे संभाला:
- ड्रॉ कॉल पर, एक
List<Light>
ऑब्जेक्ट बनाया / साफ़ किया जाता है।
- टाइल ड्रॉ लूप के दौरान, प्रत्येक टाइल को यह देखने के लिए जांचा जाता है कि उसके साथ कोई लाइट्स जुड़ी हुई है या नहीं। यदि ऐसा होता है, तो
Light
वस्तुओं को जोड़ दिया जाता है List<Light>
।
- टाइल्स अपने आप खींची जाती हैं
RenderTarget2D
।
- टाइल लूप के बाद, s की सूची के
Light
माध्यम से पुनरावृत्त किया जाता है और RenderTarget2D
एक बनावट का उपयोग करके अपने आप खींचा
जाता है जो मैंने इस तरह दिखता है: (नोट: मैंने यहां R, G और B मानों का उपयोग किया है लेकिन आपको शायद अपने में अल्फा चैनल का उपयोग करना चाहिए वास्तविक बनावट।)
- कस्टम शेडर का उपयोग करते हुए, मैं टाइल की सतह को स्क्रीन पर रेंडर करता हूं और प्रकाश सतह में एक पैरामीटर के रूप में पास करता हूं जो प्रत्येक पिक्सेल पर "अंधेरे" मूल्य के लिए नमूना होता है।
अब, ध्यान देने योग्य कुछ बातें हैं:
अंक 4 के बारे में:
मेरे पास वास्तव में दो कस्टम शेड्स हैं, एक तो लाइट्स को लाइटिंग रेंडर टारगेट (स्टेप 4) पर और दूसरा लाइट को रेंडर टारगेट (स्टेप 5) का उपयोग करके स्क्रीन पर टाइल रेंडर टारगेट खींचने के लिए।
बिंदु 4 पर इस्तेमाल किया जाने वाला शेडर मुझे एक "चमकदारता" मूल्य जोड़ने के लिए अनुमति देता है (जिसे मैं कॉल करता हूं)। यह मान एक है float
जो बनावट में प्रत्येक पिक्सेल के मुकाबले गुणा हो जाता है इससे पहले कि यह रेंडर टारगेट में जोड़ा जाता है ताकि मैं अनिवार्य रूप से रोशनी को तेज या गहरा कर सकूं।
इस बिंदु पर, मैं प्रकाश के "स्केल" मान को भी ध्यान में रखता हूं जिसका मतलब है कि मेरे पास केवल एक बनावट का उपयोग करके बड़ी या छोटी रोशनी हो सकती है।
अंक 5 के बारे में:
लाइटिंग रेंडर टारगेट के बारे में सोचें, जैसा कि 0 (ब्लैक) से लेकर 1 (व्हाइट) तक प्रत्येक पिक्सल के लिए अनिवार्य रूप से वैल्यू है। शेडर अनिवार्य रूप से गुणा करता है जो टाइल में पिक्सेल के लिए RGB मानों के विरुद्ध मूल्य को अंतिम आहरित छवि बनाने के लिए लक्ष्य प्रदान करता है।
मेरे पास यहां कुछ और कोड भी हैं जहां मैं (shader में) पास करता हूं, दिन / रात उपरिशायी रंग के रूप में उपयोग किए जाने वाला मान। यह आरजीबी मूल्यों में भी गुणा किया गया है और प्रकाश रेंडर में लक्ष्य गणना शामिल है।
अब, यह आपको ऑब्जेक्ट्स के चारों ओर जाने से ब्लॉक लाइट जैसी चीजों को करने की अनुमति नहीं देगा और कम से कम लेकिन, मेरे उद्देश्यों के लिए, यह सरल है और अच्छी तरह से काम करता है।
मैंने यहाँ और अधिक विस्तृत ब्लॉग पोस्ट लिखे हैं जो यहाँ आपकी मदद कर सकते हैं। मेरे पास अभी समय नहीं है, लेकिन यदि आप चाहते हैं कि मैं यहां gamedev पर अधिक विस्तार में जा सकता हूं।
ओह, और यहाँ यह मेरे नक्शे संपादक में एक नज़र है: