Bir vektörün başka bir vektör üzerine izdüşümü (projection) nasıl hesaplanır? Oyunda nerede kullanılır?

Cevap

a vektörünün b üzerindeki izdüşümü, a'nın b doğrultusundaki bileşenidir:

proj_b(a) = (dot(a, b) / dot(b, b)) * b

b birim vektörse (normalize edilmişse) bu dot(a, b) * b olur. Dot product'ın kendisi ise bu bileşenin işaretli uzunluğunu verir.

Dik bileşen: a - proj_b(a). Bir düzlem üzerine izdüşüm ise normali n olan düzlem için a - dot(a, n) * n şeklindedir.

Vector3 Project(Vector3 a, Vector3 b) => Vector3.Dot(a, b) / Vector3.Dot(b, b) * b;

// Duvar boyunca kayma (wall sliding): hızın duvar normaline dik kısmını tut
Vector3 Slide(Vector3 velocity, Vector3 wallNormal)
{
    return velocity - Vector3.Dot(velocity, wallNormal) * wallNormal;
    // Unity: Vector3.ProjectOnPlane(velocity, wallNormal)
}

Oyundaki kullanımları:

  • Duvar veya rampa boyunca kayma: Hızın yüzey normalindeki bileşenini çıkarmak.
  • Eğimli zeminde hareket: Input yönünü zemin düzlemine izdüşürmek.
  • Bir noktanın doğru üzerindeki en yakın noktası: Ray ve segment testleri, ip/ray çarpışmaları.
  • İleri hız hesaplama: Araç hızının araç yönündeki bileşeni (dot(velocity, forward)).
  • Kamera: Bir hedefin kamera ekseni üzerindeki derinliği.

Unity'de Vector3.Project ve Vector3.ProjectOnPlane, Unreal'da FVector::ProjectOnTo ve FVector::VectorPlaneProject hazırdır.

  1. Vektörlerde dot product ve cross product oyunlarda ne için kullanılır?OrtaOyun MatematiğiGame Dev
  2. AABB ve sphere çarpışma testleri matematiksel olarak nasıl yapılır? Hangisi ne zaman tercih edilir?OrtaOyun MatematiğiGame Dev
  3. Transform matrisleri nedir? Local space ile world space arasında nasıl dönüşüm yapılır?OrtaOyun MatematiğiGame Dev
  4. Quaternion ile Euler açıları arasındaki fark nedir? Gimbal lock nedir?ZorOyun MatematiğiGame Dev
  5. Lerp ve Slerp nedir? Lerp'ü Update içinde yanlış kullanmak neden sorun yaratır?OrtaOyun MatematiğiGame Dev
  6. 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