매트릭스를 사용하여 노드 데이터 설정 및 검색

다음 절차는 각 노드의 변환, 방향 및 배율 조정 값을 나타내기 위해 단일 변환 매트릭스가 포함된 데이터 세트를 사용하여 HIKCharacterState에서 여러 노드에 대한 데이터를 설정하고 검색하는 방법을 설명합니다.

HIKCharacterState에서 노드 데이터 설정

매트릭스가 포함된 데이터 세트에서 노드 상태를 설정하려면 다음에 간략하게 설명한 단계를 따릅니다.

단계 1: 데이터 블록 구성

16바이트로 정렬된 메모리 버퍼에서 변환 매트릭스에서 소개한 형식을 따르는 HIKCharacterState에 각 노드에 대한 매트릭스를 저장합니다. 이 매트릭스는 각 노드에 필요한 유일한 정보입니다. 따라서 일반적으로 각 매트릭스는 그 자체로 데이터 블록을 나타냅니다.

데이터 세트 내에서 각 매트릭스의 오프셋은 16바이트로 정렬되어야 합니다.

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

// first Node 
{-45.95f, 87.81f, -205.81f, 0.0f, 
 -0.54f, 0.0f, -0.05f, 0.83f,
 0.16f, 0.16f, 0.16f, 1.0f,
 -36.91f, 85.10f, -203.83f, 0.0f},
// second Node 
{-36.91f, 85.10f, -203.83f, 0.0f,
 -0.39f, 0.57f, -0.40f, 0.58f,
 0.16f, 0.16f, 0.16f, 1.0f
 -37.17f, 47.86f, -218.01f, 0.0f},
// third Node 
...

단계 2: 데이터 설명 작성

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

  • 매트릭스가 전역 공간 또는 로컬 공간에서 제공되는지 여부를 나타내는 열거 값. 이 값은 HIKGlobalSpace 또는 HIKLocalSpace가 되어야 합니다.
  • 해당 데이터 블록 내 각 매트릭스의 오프셋. 각 데이터 블록이 각 매트릭스 앞에 HumanIK에서 사용되지 않는 사용자 정의 정보를 포함하지 않는 경우 이 값은 일반적으로 0입니다.
  • 각 데이터 블록의 보폭 또는 크기. 각 매트릭스는 16개의 부동 소수점 숫자의 배열이므로 이 값은 일반적으로 sizeof(float) * 16과 동일합니다.
  • 이러한 매트릭스가 저장되도록, 매트릭스가 데이터 세트에 저장된 모든 노드의 고유 ID가 포함된 배열. 이 배열의 마지막 요소는 특별한 열거 값 HIKLastNode되어야 합니다.

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

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

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

단계 3: HumanIK에 데이터 전달

데이터 세트에 포함된 변환 매트릭스를 HIKCharacter에 적용하려면 HIKSetCharacterStateTransform() 함수를 호출합니다.

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

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

HIKCharacterState에서 노드 데이터 검색

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