下列步骤说明了如何使用数据集设置和检索 HIKCharacterState 中多个节点的数据,该数据集包含单独数值数组来表示每个节点的平移、四元数旋转和缩放值。
要从包含单独平移、四元数旋转和缩放值的数据集设置节点状态,请遵循下面概述的步骤。
在按 16 字节对齐的内存缓冲区中,存储每个节点的以下项目:
这些值不需要按照上面列出的顺序排列,例如,缩放值可以在平移值的前面。
// first Node
//----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},
// second Node
//----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},
// third Node
//----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},
...此数据描述必须是 HIKDataDescription 结构的一个实例。必须指定数据描述的以下项目:
int myUsedNodes[] = {HipsNodeId,
LeftHipNodeId,
RightHipNodeId,
...
RightFootPinkyDNodeId,
HIKLastNode
};
HIKDataDescriptionMatrix myDescription = {HIKGlobalSpace,
0,
16,
32,
sizeof(float)*12,
myUsedNodes
};调用 HIKSetCharacterStateTransformTQS() 函数,将数据集中包含的平移、旋转和缩放值应用于 HIKCharacter。
HIKSetCharacterStateTransformTQS(lCharacter, lCharacterState, &myDescription, (void *)gSrcAnimTQS[frameId]);
要使用单独数值数组从 HIKCharacterState 检索节点数据以获得每个节点的平移、四元数旋转和缩放值,必须遵循前面的使用单独 TQS 值设置和检索节点数据中介绍的类似过程,不同之处在于:
可以使用以下函数作为 HIKSetCharacterStateTransformTQS() 和 HIKGetCharacterStateTransformTQS() 的替代函数。这些函数全都接受前面详细介绍的相同参数,但读取或写入数据的方式略有不同。