별도의 TQS 값을 사용하여 노드 데이터 설정 및 검색

다음 절차는 각 노드의 변환, 쿼터니언 회전 및 배율 조정 값을 나타내기 위해 별도의 숫자 배열이 포함된 데이터 세트를 사용하여 HIKCharacterState에서 여러 노드에 대한 데이터를 설정하고 검색하는 방법을 설명합니다.

HIKCharacterState에서 노드 데이터 설정

별도의 변환, 쿼터니언 회전 및 배율 조정 값이 포함된 데이터 세트에서 노드의 상태를 설정하려면 다음에 간략하게 설명한 단계를 따릅니다.

단계 1: 데이터 블록 구성

16바이트로 정렬된 메모리 버퍼에서 각 노드에 대해 다음 항목을 저장합니다.

  • 전역 공간에서 노드의 변환을 정의하는 4개의 부동 소수점 숫자.
  • 쿼터니언으로 표시된, 전역 공간에서 노드의 방향을 정의하는 4개의 부동 소수점 숫자.
  • 전역 공간에서 노드의 배율 조정을 정의하는 4개의 부동 소수점 숫자.

위에 나열된 각 항목은 16바이트로 정렬되어야 합니다.

이들 값이 위에 나열한 순서대로 있을 필요는 없습니다. 예를 들어 배율 조정 값이 변환 값 앞에 올 수 있습니다.

예를 들면 다음과 같습니다.

// first Node 
//----translation values------\\  //---orientation values---\\ //----scaling values----\\
{-45.95f, 87.81f, -205.81f, 0.0f, -0.54f, 0.0f, -0.05f, 0.83f, 0.16f, 0.16f, 0.16f, 1.0f},
// second Node 
//----translation values------\\  //---orientation values---\\ //----scaling values----\\
{-36.91f, 85.10f, -203.83f, 0.0f, -0.39f, 0.57f, -0.40f, 0.58f, 0.16f, 0.16f, 0.16f, 1.0f},
// third Node 
//----translation values------\\  //---orientation values---\\ //----scaling values----\\
{-37.17f, 47.86f, -218.01f, 0.0f, -0.21f, 0.66f, -0.24f, 0.67f, 0.16f, 0.16f, 0.16f, 1.0f},
...

단계 2: 데이터 설명 작성

이 데이터 설명은 HIKDataDescription 구조의 인스턴스여야 합니다. 데이터 설명에 대해 다음 항목을 지정해야 합니다.

  • 매트릭스가 전역 공간 또는 로컬 공간에서 제공되는지 여부를 나타내는 열거 값. 이 값은 HIKGlobalSpace 또는 HIKLocalSpace가 되어야 합니다.
  • 각 노드의 데이터 블록 내 변환 데이터의 오프셋. 이 오프셋은 16바이트로 정렬되어야 합니다.
  • 각 노드의 데이터 블록 내 방향 데이터의 오프셋. 이 오프셋은 16바이트로 정렬되어야 합니다.
  • 각 노드의 데이터 블록 내 배율 조정 데이터의 오프셋. 이 오프셋은 16바이트로 정렬되어야 합니다.
  • 각 데이터 블록의 보폭 또는 크기. 각 데이터 블록에는 4개의 부동 소수점 숫자의 배열 3개가 포함되어 있기 때문에 해당 데이터 블록에 HumanIK에서 사용되지 않는 추가 사용자 정의 정보가 들어 있지 않는 한, 이 값은 일반적으로 sizeof(float) * 12와 동일합니다.
  • 이러한 매트릭스가 저장되도록, 매트릭스가 데이터 세트에 저장된 모든 노드의 고유 ID가 포함된 배열. 이 배열의 마지막 요소는 특별한 열거 값 HIKLastNode되어야 합니다.

    또한 이 배열은 특별한 값 HIKNotUsed를 포함할 수 있고 이 값은 HumanIK가 해당 데이터 블록을 건너뛰도록 지시합니다.

예를 들면 다음과 같습니다.

int myUsedNodes[] = {HipsNodeId, 
                     LeftHipNodeId,
                     RightHipNodeId,
                     ...
                     RightFootPinkyDNodeId,
                     HIKLastNode
                     };
HIKDataDescriptionMatrix myDescription = {HIKGlobalSpace,
                                          0,
                                          16,
                                          32,
                                          sizeof(float)*12,
                                          myUsedNodes
                                          };

단계 3: HumanIK에 데이터 세트 전달

데이터 세트에 포함된 변환, 회전 및 배율 조정 값을 HIKCharacter에 적용하려면 HIKSetCharacterStateTransformTQS() 함수를 호출합니다.

예를 들면 다음과 같습니다.

HIKSetCharacterStateTransformTQS(lCharacter,
                                 lCharacterState,
                                 &myDescription,
                                 (void *)gSrcAnimTQS[frameId]);

HIKCharacterState에서 노드 데이터 검색

각 노드의 변환, 쿼터니언 회전 및 배율 조정 값에 대해 별도의 숫자 배열을 사용하여 HIKCharacterState에서 노드 데이터를 검색하려면 다음을 제외하고 위의 별도의 TQS 값을 사용하여 노드 데이터 설정 및 검색에 설명한 것과 유사한 프로세스를 따라야 합니다.

대체 함수

다음 함수를 HIKSetCharacterStateTransformTQS()HIKGetCharacterStateTransformTQS() 대신 사용할 수 있습니다. 이러한 함수는 모두 위에 설명한 동일한 인수를 허용하지만 약간 다른 방식으로 데이터를 읽거나 씁니다.

자세한 내용은 API 참조에서 각 함수에 대한 설명을 참조하십시오.