AABB ve sphere çarpışma testleri matematiksel olarak nasıl yapılır? Hangisi ne zaman tercih edilir?

Cevap

Sphere - Sphere

İki kürenin merkezleri arasındaki mesafe yarıçaplar toplamından küçükse çarpışırlar. Karekökten kaçınmak için kareler karşılaştırılır:

bool SphereVsSphere(Vector3 c1, float r1, Vector3 c2, float r2)
{
    float r = r1 + r2;
    return (c1 - c2).sqrMagnitude <= r * r;
}

AABB - AABB

AABB (Axis-Aligned Bounding Box), kenarları dünya eksenlerine paralel kutudur; min ve max köşeleriyle tanımlanır. İki AABB her üç eksende de örtüşüyorsa çarpışır (Separating Axis Theorem'in en basit hâli):

bool AabbVsAabb(Vector3 aMin, Vector3 aMax, Vector3 bMin, Vector3 bMax)
{
    return aMin.x <= bMax.x && aMax.x >= bMin.x
        && aMin.y <= bMax.y && aMax.y >= bMin.y
        && aMin.z <= bMax.z && aMax.z >= bMin.z;
}

Sphere - AABB

Kutu üzerinde küre merkezine en yakın nokta, merkezi kutu sınırlarına clamp ederek bulunur; o noktanın merkeze uzaklığı yarıçapla karşılaştırılır:

bool SphereVsAabb(Vector3 c, float r, Vector3 min, Vector3 max)
{
    Vector3 closest = Vector3.Max(min, Vector3.Min(c, max));
    return (closest - c).sqrMagnitude <= r * r;
}

Karşılaştırma

ÖzellikSphereAABB
Test maliyetiÇok düşükÇok düşük
RotasyonEtkilenmezNesne dönünce yeniden hesaplanmalı
Uzun/ince nesnelerKötü uyum, çok boşlukDaha iyi uyum
Tipik kullanımKarakter, mermi, patlama yarıçapıDuvar, kutu, uzaysal bölümleme

Fizik motorları bu testleri broad phase'de kullanır: önce ucuz AABB testleriyle (BVH, sweep and prune) olası çiftler bulunur, sonra narrow phase'de pahalı ve hassas testler (OBB, GJK, mesh) yapılır. Döndürülmüş kutular için OBB ve SAT ile 15 eksene kadar test gerekir.

  1. Vektörlerde dot product ve cross product oyunlarda ne için kullanılır?OrtaOyun MatematiğiGame Dev
  2. Transform matrisleri nedir? Local space ile world space arasında nasıl dönüşüm yapılır?OrtaOyun MatematiğiGame Dev
  3. Quaternion ile Euler açıları arasındaki fark nedir? Gimbal lock nedir?ZorOyun MatematiğiGame Dev
  4. Lerp ve Slerp nedir? Lerp'ü Update içinde yanlış kullanmak neden sorun yaratır?OrtaOyun MatematiğiGame Dev
  5. Vektör normalize etmek ne demektir? Çapraz harekette neden gereklidir?KolayOyun MatematiğiGame Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle