The following procedures describe how to set and retrieve data for multiple Effectors in an HIKEffectorSetState using a data set that contains separate number arrays to represent each Node’s translation, orientation, scaling and IK constraint values.
In a memory buffer aligned on 16 bytes, store the following items for each Node:
Each of the items listed above must be aligned on 16 bytes.
These values do not need to be in the order listed above; for example, the scaling values may precede the translation values.
// 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},
...This data description must be an instance of the HIKEffectorDataDescription structure. You must specify the following items for your data description:
This array may also include the special value HIKNotUsed, which instructs HumanIK to skip the corresponding data block.
int myUsedEffectors[] = {HipsEffectorId,
LeftAnkleNodeId,
RightAnkleNodeId,
...
RightFootPinkyEffectorId,
HIKLastNode
};
HIKEffectorDataDescription myDesc = {0,
16,
32,
48,
sizeof(float)*16,
myUsedEffectors
};Call the HIKSetEffectorStateDataTQS() function to apply the translation, rotation, scaling and IK constraint values contained in your data set to your HIKCharacter.
HIKSetEffectorStateDataTQS(lEffectorSetState, &myDesc, (void *)goalBuffer[frameId]);
To retrieve Effector data from an HIKEffectorSetState using separate number arrays for the translation, quaternion rotation and scaling values of each Effector, you must follow a process similar to that described under Setting and Retrieving Effector Data Using Separate TQS Values above, except that: