次の手順では、各ノードのトランスレーション、向き、スケール、および IK コンストレイン値を表す別々の数値配列を含むデータ セットを使用して、HIKEffectorSetState で複数のエフェクタのデータを設定および取得する方法を説明します。
16 バイトでアラインされたメモリ バッファに、各ノードに対する次の項目を格納します。
下に表示されている各項目は、16 バイトでアラインされる必要があります。
これらの値は、上で表示されている順序である必要はなく、たとえば、スケール値はトランスレーション値より前にすることができます。
// first Effector
//----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,
//--constraint values--\\
0.5, 0.5, 1.0, 0.0},
// second Effector
//----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,
//--constraint values--\\
0.75, 0.75, 0.5, 0.0},
// third Effector
//----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,
//--constraint values--\\
1.0, 1.0, 0.5, 0.25},
...このデータ説明は、HIKEffectorDataDescription 構造のインスタンスである必要があります。データ説明のために、次の項目を指定する必要があります。
この配列には特別な値 HIKNotUsed も含めることができ、この値は HumanIK に指示して、対応するデータ ブロックをスキップします。
int myUsedEffectors[] = {HipsEffectorId,
LeftAnkleNodeId,
RightAnkleNodeId,
...
RightFootPinkyEffectorId,
HIKLastNode
};
HIKEffectorDataDescription myDesc = {0,
16,
32,
48,
sizeof(float)*16,
myUsedEffectors
};HIKSetEffectorStateDataTQS()関数を呼び出し、データ セットに含まれるトランスレーション、回転、スケール、および IK コンストレイン値を HIKCharacter に適用します。
HIKSetEffectorStateDataTQS(lEffectorSetState, &myDesc, (void *)goalBuffer[frameId]);
各エフェクタのトランスレーション、クォータニオン回転、およびスケール値に対して別々の数値配列を使用して、HIKEffectorSetState からエフェクタ データを取得するには、上の「個別の TQS 値を使用してエフェクタ データを設定および取得する」で説明されているようなプロセスに従う必要があります。