Nếu bạn biết đúc tia là gì, thì tất cả những gì bạn cần làm thực sự là mã hóa nó. Nó không quá phức tạp miễn là bạn có tọa độ cho mỗi đỉnh.
Đầu tiên, tạo một vật phát sáng. Đặt ánh sáng của bạn tại tọa độ 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
Điều này không được đảm bảo để làm việc cho một đa giác lõm, nhưng nó chỉ hoạt động tốt cho bất kỳ đa giác lồi nào.
Điều này sẽ hoạt động nếu các vật thể che khuất của bạn (tường, nhân vật, người ăn màu tím bay) được vẽ lên màn hình sau khi áp dụng ánh sáng. Nếu không, một nửa bức tường sẽ xuất hiện sáng hơn đáng kể so với nửa còn lại. Nếu ánh sáng điểm của bạn cách đều nhau từ hai cặp đỉnh của cùng một bức tường (cao bằng một nửa chiều cao của bức tường của bạn), hãy áp dụng hình tam giác cho hai đỉnh gần nhất, thay vì hai đỉnh khác.
Tôi cũng nên đề cập rằng phương pháp này đòi hỏi một điểm đỉnh được tạo động, trong đó cạnh của bán kính ánh sáng gặp bề mặt của vật thể che khuất. Điều này tạo ra tối thiểu 3 đỉnh cho bất kỳ vật thể che khuất nào và sẽ cho phép các bức tường vượt qua bán kính ánh sáng (hoặc tắt màn hình) cũng chặn bất kỳ ánh sáng nào.
Thông tin thêm về đa giác lõm và lồi