ฉันมีกล้องคนที่ 3 ที่ไม่ได้ดูที่ผู้เล่นโดยตรง แต่อยู่ตรงหน้าเขา
เมื่อผู้ใช้เข้าสู่โหมดถ่ายภาพฉันต้องการให้กล้องหมุนไปรอบ ๆ ผู้เล่นเพื่อเผชิญหน้ากับเป้าหมาย
ในภาพด้านบน "O" คือผู้เล่น (ต้นทาง) "L" คือการค้นหา "C" คือตำแหน่งกล้องและ "T" เป็นเป้าหมาย ฉันต้องการหมุนเส้น lookat C-> L เพื่อให้มันผ่าน T (C '-> L' -> T ') รอบ Origin ("O")
โดยทั่วไปฉันต้องหามุมอัลฟาที่ใส่สีแดงไว้ในภาพ
ฉันเก็บตำแหน่งกล้องของฉันในโครงสร้างเช่น:
struct CameraTarget {
Quaternion absoluteRotation;
Vec3 absolutePosition;
Vec3 cameraOffset;
Vec3 lookatOffset;
float FOV;
}
ดังนั้นหากฉันสามารถหามุมที่ฉันกำลังมองหาฉันสามารถทำสิ่งที่ชอบ:
cam->absoluteRotation = cam->absoluteRotation * alpha;
เพื่อให้ผู้เล่นมองเป้าหมายเสมอ
หากการค้นหาผ่านต้นกำเนิดฉันก็สามารถทำได้
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;
อย่างไรก็ตามในแผนภาพด้านบนสิ่งนี้ไม่ได้ผลเนื่องจากการหมุนถูกชดเชยจากแหล่งกำเนิด