หากคุณรู้ว่าการฉายรังสีคืออะไรสิ่งที่คุณต้องทำคือการเขียนโค้ดให้ยาก มันไม่ซับซ้อนเกินไปตราบใดที่คุณมีพิกัดสำหรับแต่ละจุดสุดยอด
ขั้นแรกให้สร้างวัตถุที่มีแสงน้อย วางแสงของคุณที่พิกัด 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 จุดสำหรับวัตถุที่แยกออกและจะทำให้ผนังที่ผ่านรัศมีของแสง (หรือปิดหน้าจอ) ผ่านไปยังบล็อกแสงใด ๆ
ข้อมูลเพิ่มเติมเกี่ยวกับรูปหลายเหลี่ยมเว้าและนูน