29 Nisan 2009 Çarşamba

2 FARKLI MODELİN KESİŞİMİNİ BULMAK

public bool CheckCollision(Building b) {

bool value = false;

b.boundingsphere =

b.model.Meshes[0].BoundingSphere;

b.boundingsphere.Center = b.position-b.viewVector;

b.boundingsphere.Radius *= 0.8f *b.saphirescale;

BoundingBox bb=BoundingBox.CreateFromSphere(b.boundingsphere);

         

foreach (Building a in buildings)

{

  BoundingBox ba = BoundingBox.CreateFromSphere(a.boundingsphere);

  if (bb.Intersects(ba) && !b.Equals(a))

  value = true;

}

foreach (Road  r in carroads)

{

  if (bb.Intersects(r.bounds) )

  value = true;

}

return value;

}

Buradaki metodumuz girdi olarak bir bina modeli almaktadır.Bu modelin sınıfında kendine ait bir boundingsphere bulunmaktadır.Ancak yeri sürekli değiştiği için null dur.Değerini bu fonksiyonda atıyoruz.İlk olarak Sphere in merkezi ve çapını veriyoruz.Bu işlem sonucunda aşşa yukarı modelin alanına yakın bir yuvarlak elde etmiş oluyoruz.Eğer kullandığınız alanlar köşeli ise(örneğin strateji oyunlarında vs. köşeli alanlar kullanılır)

BoundingBox bb=BoundingBox.CreateFromSphere(b.boundingsphere);

Metodu ile modelinizin sphereini köşeli hale getiriyorsunuz.Sonrada tüm diğer binaların modelleriyle olan kesişime bakıyorsunuz.Bu da

bb.Intersects(ba) metoduyla yapılıyor.

Hiç yorum yok:

Yorum Gönder