下列步骤说明了如何使用数据集设置和检索 HIKEffectorSetState 中多个效应器的数据,该数据集包含单独数值数组来表示每个节点的平移、方向、缩放和 IK 约束值。
在按 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 结构的一个实例。必须指定数据描述的以下项目:
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 值设置和检索效应器数据中介绍的类似过程,不同之处在于: