Ray dökümün ne olduğunu biliyorsanız, yapmanız gereken tek şey zor koddur. Her köşe için koordinatlarınız olduğu sürece aşırı derecede karmaşık değildir.
İlk olarak, ışık yayan bir nesne oluşturun. Işığınızı x, y koordinatlarına yerleştirin.
#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
Bunun içbükey bir çokgen için çalışacağı garanti edilmez, ancak herhangi bir dışbükey çokgen için gayet iyi çalışmalıdır.
Bu, okşayan nesneleriniz (duvarlar, karakter, uçan mor insanlar yiyen) aydınlatma uygulandıktan sonra ekrana boyanırsa işe yarayacaktır. Aksi takdirde, bir duvarın yarısı diğer yarısından önemli ölçüde daha parlak görünecektir. Nokta ışığınız aynı duvarın iki çift köşesinden eşit uzaklıktaysa (duvarınızın yüksekliğinin tam yarısı kadar yüksekse), üçgeni daha uzaktaki iki yerine en yakın iki köşeye uygulayın.
Bu yöntemin , ışığın yarıçapının kenarının, tıkanan nesnenin yüzeyiyle buluştuğu, dinamik olarak oluşturulmuş bir tepe noktası gerektirdiğini de belirtmeliyim . Bu, herhangi bir tıkanık nesne için en az 3 köşe oluşturur ve ışığın yarıçapını aşan (veya ekranın dışındaki) duvarların da herhangi bir ışığı engellemesine izin verir.
Konkav ve dışbükey çokgenler hakkında daha fazla bilgi