//--------------------------------------------------------------------- size_t SkeletonSerializer::calcAnimationTrackSize(const Skeleton* pSkel, const NodeAnimationTrack* pTrack) { size_t size = STREAM_OVERHEAD_SIZE; // unsigned short boneIndex : Index of bone to apply to size += sizeof(unsigned short); // Nested keyframes for (unsigned short i = 0; i < pTrack->getNumKeyFrames(); ++i) { size += calcKeyFrameSize(pSkel, pTrack->getNodeKeyFrame(i)); } return size; }
//--------------------------------------------------------------------- void SkeletonSerializer::writeKeyFrame(const Skeleton* pSkel, const TransformKeyFrame* key) { writeChunkHeader(SKELETON_ANIMATION_TRACK_KEYFRAME, calcKeyFrameSize(pSkel, key)); // float time : The time position (seconds) float time = key->getTime(); writeFloats(&time, 1); // Quaternion rotate : Rotation to apply at this keyframe writeObject(key->getRotation()); // Vector3 translate : Translation to apply at this keyframe writeObject(key->getTranslate()); // Vector3 scale : Scale to apply at this keyframe if (key->getScale() != Vector3::UNIT_SCALE) { writeObject(key->getScale()); } }