3 인칭 카메라를 대상쪽으로 회전


10

플레이어를 직접 보지 않고 그 앞에있는 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;

그러나 위의 다이어그램에서는 회전이 원점에서 오프셋 되므로이 기능이 제대로 작동하지 않습니다.

답변:


1

언젠가 다른 사람을 돕는다면 나에게 응답 :

SFDKT는 목표 지점을 현재 카메라 모양 방향으로 투영하는 것에 대한 올바른 아이디어를 가지고 있습니다.

그러나 나의 가장 큰 문제는이 점 P를 찾는 것이 었습니다. 약간의 삼각법이 그것을 해결하는 것으로 나타났습니다.

세 점 CPO에 의해 형성된 삼각형을 고려하면 :

  1. 길이 LO, OC 및 CL을 알고 있으므로 C에서 각도를 계산할 수 있습니다.

  2. 이제 각도 C와 OC와 PO의 길이를 알고 있습니다. 죄의 법칙을 사용하면 O에서 각도를 찾을 수 있습니다 ( 이 웹 사이트 는 누락 된 각도를 찾는 데 매우 유용하다는 것을 알았습니다 )

  3. 그런 다음 마지막 누락 각도 P를 찾아 길이 CP를 찾기 위해 Sines의 법칙을 다시 사용합니다.

  4. posC + normalized (CL) * lengthCP 방향을 취하면 P의 위치를 ​​나타냅니다.

  5. PI가 있으면 OP와 OT 사이의 최단 회전을 계산할 수있어 카메라 회전에 필요한 쿼터니언을 얻을 수 있습니다.

3D에서 원하지 않는 롤에 약간의 문제가 있었지만 Z = 0으로 문제를 해결 한 다음 누락 된 피치 회전을 계산하여 카메라의 벡터를 똑바로 유지했습니다.


0

이 그림은 질문을보다 쉽게 ​​해결하는 데 필요한 대칭을 추가합니다.

여기에 이미지 설명을 입력하십시오

그냥 프로젝트 L벡터를 따라 CL있도록 |P-O|=|T-O|.

이제 원하는 각도로 회전 된 동일한 두 개의 동일한 삼각형 ( CPOC'TO)입니다. IEang(OT)-ang(OP)

C'L'모두와 동일 C하고 L대해 회전 후에 O동일한 양만큼.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.