ImportAnimationFromAssimp2Json function
Implementation
SkeletalAnimation ImportAnimationFromAssimp2Json(
Map<String, dynamic> json, List<Bone> skeleton) {
Map<String, Bone> name2bone = <String, Bone>{};
skeleton.forEach((b) => name2bone[b.boneName] = b);
String name = json["name"];
double tickspersecond = json["tickspersecond"].toDouble();
double duration = json["duration"];
List channels = json["channels"];
SkeletalAnimation anim = SkeletalAnimation(name, duration, skeleton.length);
print("animated bones: ${channels.length}");
for (Map<String, dynamic> c in channels) {
assert(name2bone.containsKey(c["name"]));
final Bone bone = name2bone[c["name"]] as Bone;
List<double> positionTimes = [];
List<VM.Vector3> positionValues = [];
for (List pos in c["positionkeys"]) {
positionTimes.add(pos[0] / tickspersecond);
positionValues.add(MakeVector3(pos[1]));
}
List<double> rotationTimes = [];
List<VM.Quaternion> rotationValues = [];
for (List rot in c["rotationkeys"]) {
rotationTimes.add(rot[0] / tickspersecond);
List<double> q = _Floatify(rot[1]);
rotationValues.add(VM.Quaternion(q[1], q[2], q[3], q[0]));
}
List<double> scaleTimes = [];
List<VM.Vector3> scaleValues = [];
for (List sca in c["scalingkeys"]) {
scaleTimes.add(sca[0] / tickspersecond);
scaleValues.add(MakeVector3(sca[1]));
}
anim.InsertBone(BoneAnimation(bone, positionTimes, positionValues,
rotationTimes, rotationValues, scaleTimes, scaleValues));
}
return anim;
}