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
| Özellik | Sphere | AABB |
|---|---|---|
| Test maliyeti | Çok düşük | Çok düşük |
| Rotasyon | Etkilenmez | Nesne dönünce yeniden hesaplanmalı |
| Uzun/ince nesneler | Kötü uyum, çok boşluk | Daha iyi uyum |
| Tipik kullanım | Karakter, 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.
İlgili Oyun Matematiği soruları
- Vektörlerde dot product ve cross product oyunlarda ne için kullanılır?
- Transform matrisleri nedir? Local space ile world space arasında nasıl dönüşüm yapılır?
- Quaternion ile Euler açıları arasındaki fark nedir? Gimbal lock nedir?
- Lerp ve Slerp nedir? Lerp'ü Update içinde yanlış kullanmak neden sorun yaratır?
- Vektör normalize etmek ne demektir? Çapraz harekette neden gereklidir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.