示例#1
0
        /// <summary>
        /// 본정보 추가
        /// </summary>
        /// <returns></returns>
        public BoneData addBoneData()
        {
            BoneData boneData = new BoneData();
            boneDatas.Add(boneData);

            return boneData;
        }
示例#2
0
 public void setBoneData(int index, BoneData data)
 {
     boneDatas[index] = data;
 }
示例#3
0
 public void initializeBoneData(int index)
 {
     boneDatas[index] = new BoneData();
 }
示例#4
0
        /// <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;
        }