void BinaryConverter::SaveAnimations(Serializer::Writer &wr, Model *m) { const auto& anims = m->GetAnimations(); wr.Int32(anims.size()); for (const auto& anim : anims) { wr.String(anim->GetName()); wr.Double(anim->GetDuration()); wr.Int32(anim->GetChannels().size()); for (const auto &chan : anim->GetChannels()) { wr.String(chan.node->GetName()); //write pos/rot/scale keys wr.Int32(chan.positionKeys.size()); for (const auto &pkey : chan.positionKeys) { wr.Double(pkey.time); wr.Vector3f(pkey.position); } wr.Int32(chan.rotationKeys.size()); for (const auto &rkey : chan.rotationKeys) { wr.Double(rkey.time); wr.WrQuaternionf(rkey.rotation); } wr.Int32(chan.scaleKeys.size()); for (const auto &skey : chan.scaleKeys) { wr.Double(skey.time); wr.Vector3f(skey.scale); } } } }
void GeomTree::Save(Serializer::Writer &wr) const { wr.Int32(m_numVertices); wr.Int32(m_numEdges); wr.Int32(m_numTris); wr.Double(m_radius); wr.Vector3d(m_aabb.max); wr.Vector3d(m_aabb.min); wr.Double(m_aabb.radius); wr.Int32(m_numEdges); for (Sint32 iAabb = 0; iAabb < m_numEdges; ++iAabb) { wr.Vector3d(m_aabbs[iAabb].max); wr.Vector3d(m_aabbs[iAabb].min); wr.Double(m_aabbs[iAabb].radius); } for (Sint32 iEdge = 0; iEdge < m_numEdges; ++iEdge) { m_edges[iEdge].Save(wr); } for (Sint32 iVert = 0; iVert < m_numVertices; ++iVert) { wr.Vector3f(m_vertices[iVert]); } for (Sint32 iIndi = 0; iIndi < (m_numTris * 3); ++iIndi) { wr.Int16(m_indices[iIndi]); } for (Sint32 iTri = 0; iTri < m_numTris; ++iTri) { wr.Int32(m_triFlags[iTri]); } }