Skeleton3D* Skeleton3D::create(const std::vector<NodeData*>& skeletondata) { auto skeleton = new (std::nothrow) Skeleton3D(); for (const auto& it : skeletondata) { auto bone = skeleton->createBone3D(*it); bone->resetPose(); skeleton->_rootBones.pushBack(bone); } skeleton->autorelease(); return skeleton; }
void IkSolver::resetAll() { rootBone = &skeleton[0]; rootPos = rootBone->worldPos; effectorBone = 0; for (int i = 0; i < (int)skeleton.numBones(); ++i) { const Bone &b = skeleton[i]; if (b.isEffector()) { effectorBone = &b; targetPos = b.worldPos; break; } } resetPose(); }