//--------------------------------------------------------------------- void SkeletonSerializer::readBone(DataStreamPtr& stream, Skeleton* pSkel) { // char* name String name = readString(stream); // unsigned short handle : handle of the bone, should be contiguous & start at 0 unsigned short handle; readShorts(stream, &handle, 1); // Create new bone Bone* pBone = pSkel->createBone(name, handle); // Vector3 position : position of this bone relative to parent Vector3 pos; readObject(stream, pos); pBone->setPosition(pos); // Quaternion orientation : orientation of this bone relative to parent Quaternion q; readObject(stream, q); pBone->setOrientation(q); #if OGRE_SERIALIZER_VALIDATE_CHUNKSIZE // Hack to fix chunk size validation: mChunkSizeStack.back() += calcStringSize(name); #endif // TODO: don't depend on mCurrentstreamLen in next skeleton format! // Currently we use wrong chunk sizes, but we can't fix it, because we depend on mCurrentstreamLen // Do we have scale? if (mCurrentstreamLen > calcBoneSizeWithoutScale(pSkel, pBone)) { Vector3 scale; readObject(stream, scale); pBone->setScale(scale); } }
//--------------------------------------------------------------------- void SkeletonSerializer::readBone(DataStreamPtr& stream, Skeleton* pSkel) { // char* name String name = readString(stream); // unsigned short handle : handle of the bone, should be contiguous & start at 0 unsigned short handle; readShorts(stream, &handle, 1); // Create new bone Bone* pBone = pSkel->createBone(name, handle); // Vector3 position : position of this bone relative to parent Vector3 pos; readObject(stream, pos); pBone->setPosition(pos); // Quaternion orientation : orientation of this bone relative to parent Quaternion q; readObject(stream, q); pBone->setOrientation(q); // Do we have scale? if (mCurrentstreamLen > calcBoneSizeWithoutScale(pSkel, pBone)) { Vector3 scale; readObject(stream, scale); pBone->setScale(scale); } }
//--------------------------------------------------------------------- size_t SkeletonSerializer::calcBoneSize(const Skeleton* pSkel, const Bone* pBone) { size_t size = calcBoneSizeWithoutScale(pSkel, pBone); // scale if (pBone->getScale() != Vector3::UNIT_SCALE) { size += sizeof(float) * 3; } return size; }