플레이어를 직접 보지 않고 그 앞에있는 3 인칭 카메라가 있습니다.
사용자가 촬영 모드로 들어가면 카메라가 플레이어를 돌려 대상을 향하게하고 싶습니다.
위 이미지에서. "O"는 플레이어 (원본)이고 "L"은 감시이며 "C"는 카메라 위치이고 "T"는 대상입니다. 감시 선 C-> L을 회전시켜 원점 ( "O") 주위에서 T (C '-> L'-> T ')를지나도록합니다.
기본적으로 그림에서 빨간색으로 넣은 각도 알파를 찾아야합니다.
카메라 위치를 다음과 같은 구조로 저장합니다.
struct CameraTarget {
Quaternion absoluteRotation;
Vec3 absolutePosition;
Vec3 cameraOffset;
Vec3 lookatOffset;
float FOV;
}
그래서 내가 찾고있는 각도를 찾을 수 있다면 다음과 같이 할 수 있습니다 :
cam->absoluteRotation = cam->absoluteRotation * alpha;
플레이어가 항상 대상을 보도록하기 위해.
Lookout이 Origin을지나 가면 간단히 할 수 있습니다.
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;
그러나 위의 다이어그램에서는 회전이 원점에서 오프셋 되므로이 기능이 제대로 작동하지 않습니다.