Ne programladığınızı bilmiyorum, ama XNA'da şu şekilde ele aldım:
- Çizim çağrısında bir
List<Light>
nesne oluşturulur / temizlenir.
- Döşeme çizim döngüsü sırasında, her döşemenin kendisiyle ilişkilendirilmiş Işık olup olmadığını kontrol edilir. Varsa,
Light
nesneler List<Light>
.
- Fayanslar kendi üzerine çizilir
RenderTarget2D
.
- Döşeme döngüsünün ardından,
Light
s listesi yinelenir ve RenderTarget2D
şöyle yaptığım bir doku kullanarak kendi başlarına çizilir :
(Not: Burada R, G ve B değerlerini kullandım, ancak muhtemelen alfa kanalını kullanmalısınız. gerçek doku.)
- Özel bir gölgelendirici kullanarak, karo yüzeyini ekrana dönüştürür ve aydınlatma yüzeyinde, her pikseldeki "karanlık" değeri için örneklenen bir parametre olarak geçiririm.
Şimdi dikkat etmeniz gereken birkaç nokta var:
4. Nokta ile ilgili:
Aslında iki özel gölgelendiricim var.
4. noktada kullanılan gölgelendirici, "parlaklık" değerini eklememe izin veriyor. Bu değer, float
oluşturma hedefine eklenmeden önce dokudaki her pikselle çarpılan bir değerdir, böylece esasen ışıkları daha parlak veya daha karanlık yapabilirim.
Bu noktada, ışığın "ölçek" değerini de hesaba katarım, bu da tek bir doku kullanarak büyük veya küçük ışıklara sahip olabileceğim anlamına gelir.
Nokta 5 ile ilgili:
Aydınlatma oluşturma hedefini esasen her piksel için 0 (siyah) ile 1 (beyaz) arasında bir değere sahip olarak düşünün. Gölgelendirici, esasen son çizilen görüntüyü yapmak için bu değeri döşemenin oluşturma hedefindeki bir piksel için RGB değerleriyle çarpar.
Ayrıca burada (gölgelendiriciye) gündüz / gece kaplama rengi olarak kullanılacak bir değer geçirdiğim daha fazla kod var. Bu aynı zamanda RGB değerleriyle çarpılır ve aydınlatma render hedef hesaplarına dahil edilir.
Şimdi, bu, bloğun ışığının nesnelerin etrafında dolaşmasını ve ne yapmamasını sağlamanıza izin vermeyecek, ancak en azından amacım için basit ve iyi çalışıyor.
Burada ve burada size yardımcı olabilecek daha ayrıntılı blog yazıları yazdım . Şu anda zamanım yok, ama eğer isterseniz gamedev'de daha ayrıntılı bir şekilde ayrıntılara girebilirim.
Oh, ve işte harita düzenleyicime bir göz atın: