/// t-->[0,1] public static Quaternion GetHermitePoint_Q(float t, YamlRotationData preData, YamlRotationData nexData, LerpType lerpType) { Quaternion rotation = new Quaternion(); if(lerpType==LerpType.LineLerp) { rotation = Quaternion.Slerp(preData.value,nexData.value, t); } else { rotation.x = CalculateHermiteFloat(t,nexData.time-preData.time,preData.value.x,nexData.value.x,preData.outSlope.x,nexData.inSlope.x); rotation.y = CalculateHermiteFloat(t,nexData.time-preData.time,preData.value.y,nexData.value.y,preData.outSlope.y,nexData.inSlope.y); rotation.z = CalculateHermiteFloat(t,nexData.time-preData.time,preData.value.z,nexData.value.z,preData.outSlope.z,nexData.inSlope.z); rotation.w = CalculateHermiteFloat(t,nexData.time-preData.time,preData.value.w,nexData.value.w,preData.outSlope.w,nexData.inSlope.w); } return rotation; }
void ParseRotationDataToList(YamlSequenceNode node, string key) { IList <YamlNode> nodeList = node.Children; List <YamlSQTData> list = new List <YamlSQTData>(); foreach (YamlMappingNode valueNode in nodeList) { YamlRotationData rotationData = new YamlRotationData(); rotationData.time = float.Parse(EasyYaml.FindMapNodeByKey("time", valueNode).ToString()); rotationData.value = GetQuaternion("value", valueNode); rotationData.inSlope = GetQuaternion("inSlope", valueNode); rotationData.outSlope = GetQuaternion("outSlope", valueNode); rotationData.tangentMode = float.Parse(EasyYaml.FindMapNodeByKey("tangentMode", valueNode).ToString()); list.Add(rotationData); } rotationInfo.Add(key, list); }