void MeshLoader_v1::ReadSkelAnim(MeshPtr mesh, DataStreamPtr & stream) { Skeleton * skel = mesh->GetSkeleton(); int version = -1; stream->Read(&version, sizeof (int)); d_assert (version == K_SkelAnim_Version); char name[128]; stream->Read(name, 128); Animation * anim = mesh->CreateAnimation(name); int numAnims = 0; stream->Read(&numAnims, sizeof(int)); for (int i = 0; i < numAnims; ++i) { int boneId, count; stream->Read(&boneId, sizeof(int)); stream->Read(&count, sizeof(int)); if (count == 0) continue; SkeletonAnimation * skel_anim; skel_anim = anim->CreateSkeletonAnimation(boneId); KeyFrame * kf; float time; Vec3 trans; Quat rotate; Vec3 scale; for (int i = 0; i < count; ++i) { stream->Read(&time, sizeof(float)); stream->Read(&trans, sizeof(float) * 3); stream->Read(&rotate, sizeof(float) * 4); stream->Read(&scale, sizeof(float) * 3); kf = skel_anim->CreateKeyFrame(); kf->SetTime(time); kf->SetTranslate(trans); kf->SetRotation(rotate); kf->SetScale(scale); } } anim->_calcuLength(); }