/// <summary> /// 본정보 추가 /// </summary> /// <returns></returns> public BoneData addBoneData() { BoneData boneData = new BoneData(); boneDatas.Add(boneData); return boneData; }
public void setBoneData(int index, BoneData data) { boneDatas[index] = data; }
public void initializeBoneData(int index) { boneDatas[index] = new BoneData(); }
/// <summary> /// 두 키프레임의 본 데이터를 alpha[0,1]의 비율로 블렌딩하여 변환행렬 업데이트 /// </summary> /// <param name="curData"></param> /// <param name="nextData"></param> /// <param name="alpha"></param> public void update(BoneData curData, BoneData nextData, float alpha) { Matrix objectTransform; if (nextData != null) { // 다음 데이터가 있다.. 두 데이터를 보간 // 보간 Vector3 position = curData.Position * (1f - alpha) + nextData.Position * alpha; Quaternion rotation = Quaternion.Slerp(curData.Rotation, nextData.Rotation, alpha); Vector3 scale = curData.Scale * (1f - alpha) + nextData.Scale * alpha; // 행렬 설정 objectTransform = Matrix.CreateScale(scale) * Matrix.CreateFromQuaternion(rotation) * Matrix.CreateTranslation(position); } else { // 다음 데이터가 없다.. 현재 데이터 적용 // 행렬 설정 objectTransform = Matrix.CreateScale(curData.Scale) * Matrix.CreateFromQuaternion(curData.Rotation) * Matrix.CreateTranslation(curData.Position); } // 변환행렬 설정 if (parent != null) transform = objectTransform * localTransform * parent.Transform; else transform = objectTransform * localTransform; }