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

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

HIKEffectorSetState에서 이펙터 데이터 설정

단계 1: 데이터 블록 구성

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

  • 변환 매트릭스에서 소개한 형식을 따르는 HIKEffectorSetState의 각 이펙터에 대한 매트릭스. 데이터 세트 내에서 각 매트릭스의 오프셋은 16바이트로 정렬되어야 합니다.
  • 이펙터의 변환 도달, 회전 도달, 당기기 및 저항 제약 조건에 대해 원하는 값을 나타내는 4개의 부동 소수점 값 배열. 이러한 값은 0.0에서 1.0 사이에 있어야 합니다.

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

// first Node's data block 
// -- matrix data
{-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,
// -- constraint data
 0.5f, 0.5f, 1.0f, 0.0f},
// second Node's data block 
// -- matrix data
{-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,
// -- constraint data
 0.5f, 0.5f, 1.0f, 0.0f},
},
// third Node's data block 
...

단계 2: 데이터 설명 작성

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

  • 각 이펙터의 데이터 블록 내 각 매트릭스의 오프셋. 각 데이터 블록이 각 매트릭스 앞에 HumanIK에서 사용되지 않는 사용자 정의 정보를 포함하지 않는 경우 이 값은 일반적으로 0입니다.
  • 각 이펙터의 데이터 블록 내 제약 조건 데이터의 오프셋.
  • 각 데이터 블록의 보폭 또는 크기. 각 매트릭스가 16개의 부동 소수점 숫자의 배열이고 각 데이터 블록에 4개의 부동 소수점 제약 조건 백분율이 포함되어 있기 때문에 이 값은 일반적으로 sizeof(float) * 20과 동일합니다.
  • 이러한 매트릭스가 저장되도록, 매트릭스가 데이터 세트에 저장된 모든 이펙터의 고유 ID가 포함된 배열. 이 배열의 마지막 요소는 특별한 열거 값 HIKLastNode되어야 합니다.

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

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

int myUsedEffectors[] = {HipsEffectorId, 
                         LeftAnkleNodeId,
                         RightAnkleNodeId,
                         ...
                         RightFootPinkyEffectorId,
                         HIKLastNode
                         };
HIKEffectorDataDescriptionMatrix myDesc = {0,
                                           64,
                                           sizeof(float)*20,
                                           myUsedEffectors
                                           };

단계 3: HumanIK에 데이터 전달

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

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

HIKSetEffectorStateData(lEffectorState,
                        &myDesc,
                        (void *)goalBuffer[frameId]);

HIKEffectorSetState에서 이펙터 데이터 검색

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