Doğrudan oyuncuya değil, önünde bir yere bakan 3. kişi kameram var.
Kullanıcı çekim moduna girdiğinde, kameranın hedefe bakması için oynatıcının etrafında dönmesini istiyorum.
Yukarıdaki resimde. "O" oynatıcı (Orijin), "L" arama, "C" kamera konumu ve "T" hedeftir. C -> L gözetleme çizgisini Kök ("O") etrafında T (C '-> L' -> T ') geçecek şekilde döndürmek istiyorum.
Temelde resimde kırmızıya koyduğum alfa açısını bulmam gerekiyor.
Kamera konumumu şöyle bir yapıda saklıyorum:
struct CameraTarget {
Quaternion absoluteRotation;
Vec3 absolutePosition;
Vec3 cameraOffset;
Vec3 lookatOffset;
float FOV;
}
Aradığım açıyı bulabilirsem şöyle bir şey yapabilirim:
cam->absoluteRotation = cam->absoluteRotation * alpha;
Oyuncunun her zaman hedefe bakmasını sağlamak için.
Uyanık Kökeni geçiyorsa,
Vec3 origDir = cam->lookAtOffset - cam->absolutePosition;
origDir.normalize();
Vec3 newDir = cam->target - cam->absolutePosition;
newDir.normalize();
Quaternion q(origDir, newDir); // from->to
cam->absoluteRotation = cam->absoluteRotation * q;
Bununla birlikte, yukarıdaki şemada, rotasyon Origin'den ofsetlendiği için bu işe yaramaz.