यदि आप जानते हैं कि रे कास्टिंग क्या है, तो आपको वास्तव में यह करने की आवश्यकता है कि यह कठिन कोड है। जब तक आप प्रत्येक शीर्ष के लिए निर्देशांक नहीं है तब तक यह जटिल नहीं है।
सबसे पहले, एक प्रकाश-उत्सर्जक वस्तु बनाएं। अपने प्रकाश को x, y निर्देशांक पर रखें।
#include <math.h>
int i = 0;
if ( sqrt( abs( light.x - vertex.x )^2 + abs( light.y - vertex.y )^2 ) <= light.radius)
{
lightOccludingVertices[i] = vertex;
i++;
}
//If two or more vertices are both a member of an individual wall,
//illuminate the triangular area between the light, the furthest
//vertex on the x-axis, and the furthest vertex on the y-axis
यह एक अवतल बहुभुज के लिए काम करने की गारंटी नहीं है, लेकिन यह किसी भी उत्तल बहुभुज के लिए ठीक काम करना चाहिए।
यह तब काम करेगा जब आपके ओब्जेक्टिंग ऑब्जेक्ट्स (दीवारें, पात्र, फ्लाइंग पर्पल लोग ईटर) को लाइटिंग लगाने के बाद स्क्रीन पर चित्रित किया जाता है। अन्यथा, एक दीवार का आधा हिस्सा अन्य आधे की तुलना में काफी उज्जवल दिखाई देगा। यदि आपका बिंदु प्रकाश एक ही दीवार के दो जोड़े से समान दूरी पर है (ठीक आपकी दीवार की ऊँचाई से आधा), तो त्रिकोण को दो दूर के बजाय दो निकटतम कोने पर लागू करें।
मुझे यह भी उल्लेख करना चाहिए कि इस पद्धति के लिए एक गतिशील रूप से निर्मित शीर्ष बिंदु की आवश्यकता होती है जहां प्रकाश की त्रिज्या के किनारे को समतल वस्तु की सतह से मिलता है। यह किसी भी आच्छादित वस्तु के लिए कम से कम 3 कोने बनाता है और उन दीवारों के लिए अनुमति देगा जो प्रकाश की त्रिज्या (या स्क्रीन से दूर) का विस्तार करती हैं ताकि किसी भी प्रकाश को अवरुद्ध कर सकें।
अवतल और उत्तल बहुभुज पर अधिक जानकारी