D3DXQuaternionSquadSetup 함수(D3DX10Math.h)
참고
D3DX10 유틸리티 라이브러리는 더 이상 사용되지 않습니다. 대신 DirectXMath 를 사용하는 것이 좋습니다.
구형 사분면 보간에 대한 제어점을 설정합니다.
구문
void D3DXQuaternionSquadSetup(
_In_ D3DXQUATERNION *pAOut,
_In_ D3DXQUATERNION *pBOut,
_In_ D3DXQUATERNION *pCOut,
_In_ const D3DXQUATERNION *pQ0,
_In_ const D3DXQUATERNION *pQ1,
_In_ const D3DXQUATERNION *pQ2,
_In_ const D3DXQUATERNION *pQ3
);
매개 변수
-
pAOut [in]
-
형식: D3DXQUATERNION*
AOut에 대한 포인터입니다.
-
pBOut [in]
-
형식: D3DXQUATERNION*
BOut에 대한 포인터입니다.
-
pCOut [in]
-
형식: D3DXQUATERNION*
COut에 대한 포인터입니다.
-
pQ0 [in]
-
형식: const D3DXQUATERNION*
입력 제어점 Q0에 대한 포인터입니다.
-
pQ1 [in]
-
형식: const D3DXQUATERNION*
입력 제어점 Q1에 대한 포인터입니다.
-
pQ2 [in]
-
형식: const D3DXQUATERNION*
입력 제어점 Q2에 대한 포인터입니다.
-
pQ3 [in]
-
형식: const D3DXQUATERNION*
입력 제어점 Q3에 대한 포인터입니다.
반환 값
없음
설명
이 함수는 pQ0, pQ1, pQ2 및 pQ3 입력에 제공되는 4개의 제어 지점을 사용합니다. 그런 다음 함수는 이러한 값을 변경하여 최단 경로를 따라 흐르는 곡선을 찾습니다. q0, q2 및 q3 값은 아래와 같이 계산됩니다.
q0 = |Q0 + Q1| < |Q0 - Q1| ? -Q0 : Q0
q2 = |Q1 + Q2| < |Q1 - Q2| ? -Q2 : Q2
q3 = |Q2 + Q3| < |Q2 - Q3| ? -Q3 : Q3
새 Q 값을 계산하면 AOut, BOut 및 COut 값이 다음과 같이 계산됩니다.
AOut = q1 * e[-0.25\ *(\ Ln[Exp(q1)*q2]\ +\ Ln[Exp(q1)*q0]\ )\ ]
BOut = q2 * e[-0.25\ *(\ Ln[Exp(q2)*q3]\ +\ Ln[Exp(q2)*q1]\ )\ ]
COut = q2
참고
Ln은 API 메서드 D3DXQuaternionLn 이고 Exp는 API 메서드 D3DXQuaternionExp입니다.
아직 정규화되지 않은 모든 쿼터니언 입력에 D3DXQuaternionNormalize 를 사용합니다.
예제
다음 예제에서는 쿼터니언 키 집합(Q0, Q1, Q2, Q3)을 사용하여 내부 사분면 지점(A, B, C)을 계산하는 방법을 보여 줍니다. 이렇게 하면 인접한 세그먼트에서 탄젠트가 연속됩니다.
A B
Q0 Q1 Q2 Q3
다음 코드 예제에서는 1분기와 2분기 사이에 보간하는 방법을 보여 줍니다.
// Rotation about the z-axis
D3DXQUATERNION Q0 = D3DXQUATERNION(0, 0, 0.707f, -.707f);
D3DXQUATERNION Q1 = D3DXQUATERNION(0, 0, 0.000f, 1.000f);
D3DXQUATERNION Q2 = D3DXQUATERNION(0, 0, 0.707f, 0.707f);
D3DXQUATERNION Q3 = D3DXQUATERNION(0, 0, 1.000f, 0.000f);
D3DXQUATERNION A, B, C, Qt;
FLOAT time = 0.5f;
D3DXQuaternionSquadSetup(&A, &B, &C, &Q0, &Q1, &Q2, &Q3);
D3DXQuaternionSquad(&Qt, &Q1, &A, &B, &C, time);
참고
- C는 함수의 결과에 따라 +/- Q2입니다.
- Qt는 함수의 결과입니다.
결과는 시간 = 0.5에 대한 z 축 주위에 45도의 회전입니다.
요구 사항
요구 사항 | 값 |
---|---|
헤더 |
|
라이브러리 |
|
추가 정보