示例#1
0
 public Matrix4x4 GetBoneTransformation(int index, bool mirrored, int smoothing = 0)
 {
     if (smoothing == 0)
     {
         return(mirrored ? World[Data.Symmetry[index]].GetMirror(Data.GetAxis(Data.MirrorAxis)) : World[index]);
     }
     else
     {
         Frame[] frames = Data.GetFrames(Mathf.Clamp(Index - smoothing, 1, Data.GetTotalFrames()), Mathf.Clamp(Index + smoothing, 1, Data.GetTotalFrames()));
         Vector3 P      = Vector3.zero;
         Vector3 Z      = Vector3.zero;
         Vector3 Y      = Vector3.zero;
         float   sum    = 0f;
         for (int i = 0; i < frames.Length; i++)
         {
             float weight = 2f * (float)(i + 1) / (float)(frames.Length + 1);
             if (weight > 1f)
             {
                 weight = 2f - weight;
             }
             Matrix4x4 matrix = mirrored ? frames[i].World[Data.Symmetry[index]].GetMirror(Data.GetAxis(Data.MirrorAxis)) : frames[i].World[index];
             P   += weight * matrix.GetPosition();
             Z   += weight * matrix.GetForward();
             Y   += weight * matrix.GetUp();
             sum += weight;
         }
         P /= sum;
         Z /= sum;
         Y /= sum;
         return(Matrix4x4.TRS(P, Quaternion.LookRotation(Z, Y), Vector3.one));
     }
 }
 public Matrix4x4 GetBoneTransformation(int index, bool mirrored)
 {
     return(mirrored ? World[Data.Symmetry[index]].GetMirror(Data.GetAxis(Data.MirrorAxis)) : World[index]);
 }