void MdlFileImport::loadBone( Actor* actor ) { Skeleton* skeleton = actor->getSkeleton(); mstudiobonecontroller_t* boneCtrl = mStudioHeader->getBoneControllors(); for( int i = 0 ; i < mStudioHeader->numbonecontrollers ; ++i ) { } mstudiobone_t* boneVec = mStudioHeader->getBones(); assert( skeleton->getBoneNum() == 1 ); for( int i = 0 ; i < mStudioHeader->numbones; ++i ) { mstudiobone_t& boneDesc = boneVec[i]; BoneNode* bone; skeleton->createBone( boneDesc.name , boneDesc.parent + 1 ); for( int n = 0 ; n < 6 ;++n ) { if ( boneDesc.bonecontroller[n] != -1 ) { int kk = 1; } } } int totalFrame = 0; mstudioseqdesc_t* seqVec = mStudioHeader->getSequences(); for ( int i = 0 ; i < mStudioHeader->numseq ; ++i ) { mstudioseqdesc_t& curSeq = seqVec[i]; AnimationState* state = actor->createAnimationState( curSeq.label , totalFrame , totalFrame + seqVec[i].numframes - 1 ); state->setTimeScale( curSeq.fps / 30.0f ); totalFrame += curSeq.numframes; } skeleton->createMotionData( totalFrame ); totalFrame = 0; for ( int i = 0 ; i < mStudioHeader->numseq ; ++i ) { mstudioseqdesc_t& curSeq = seqVec[i]; for( int frame = 0 ; frame < curSeq.numframes ; ++frame ) { loadMotionData( skeleton , curSeq , frame , totalFrame ); } totalFrame += curSeq.numframes; } }
Skeleton MoCapManager::createDefaultSkeleton() const { Skeleton skeleton; Bone boneData; // hip - this will be the anchor of the skeleton boneData.setStartPos(Vector3(0.0, 1.0, 0.0)); boneData.setLength(0.001); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 0.0, 1.0), M_PI*90.0/180.0) * Quaternion(Vector3(-1.0, 0.0, 0.0), M_PI*90.0/180.0)); boneData.setName("hip"); int hip = skeleton.createBone(boneData); // hip - neck (i.e. the body) boneData.setLength(0.55); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 0.0, 1.0), M_PI*90.0/180.0) * Quaternion(Vector3(-1.0, 0.0, 0.0), M_PI*90.0/180.0)); boneData.setName("body"); int neck = skeleton.createBone(boneData, hip); // neck - head boneData.setLength(0.30); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 0.0, 1.0), M_PI*90.0/180.0) * Quaternion(Vector3(-1.0, 0.0, 0.0), M_PI*90.0/180.0)); boneData.setName("head"); skeleton.createBone(boneData, neck); // neck - right shoulder boneData.setLength(0.20); boneData.setDefaultOrientation(Quaternion(1.0, 0.0, 0.0, 0.0)); boneData.setName("rShoulder"); int rShoulder = skeleton.createBone(boneData, neck); // right upper arm boneData.setLength(0.35); boneData.setDefaultOrientation(Quaternion(1.0, 0.0, 0.0, 0.0)); boneData.setName("rUpperArm"); int rUpperArm = skeleton.createBone(boneData, rShoulder); // right lower arm boneData.setLength(0.30); boneData.setDefaultOrientation(Quaternion(1.0, 0.0, 0.0, 0.0)); boneData.setName("rLowerArm"); skeleton.createBone(boneData, rUpperArm); /* // right upper arm sensor boneData.setLength(0.35); boneData.setDefaultOrientation(Quaternion(1.0, 0.0, 0.0, 0.0)); boneData.setName("rUpperArmSensor"); int rUpperArmS = skeleton.createBone(boneData, rShoulder); // right lower arm sensor boneData.setLength(0.30); boneData.setDefaultOrientation(Quaternion(1.0, 0.0, 0.0, 0.0)); boneData.setName("rLowerArmSensor"); skeleton.createBone(boneData, rUpperArmS); */ // neck - left shoulder boneData.setLength(0.20); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 1.0, 0.0), M_PI*180.0/180.0)); boneData.setName("lShoulder"); int lShoulder = skeleton.createBone(boneData, neck); // left upper arm boneData.setLength(0.35); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 1.0, 0.0), M_PI*180.0/180.0)); boneData.setName("lUpperArm"); int lUpperArm = skeleton.createBone(boneData, lShoulder); // left lower arm boneData.setLength(0.30); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 1.0, 0.0), M_PI*180.0/180.0)); boneData.setName("lLowerArm"); skeleton.createBone(boneData, lUpperArm); /* // left upper arm sensor boneData.setLength(0.35); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 1.0, 0.0), M_PI*180.0/180.0)); boneData.setName("lUpperArmSensor"); int lUpperArmS = skeleton.createBone(boneData, lShoulder); // left lower arm sensor boneData.setLength(0.30); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 1.0, 0.0), M_PI*180.0/180.0)); boneData.setName("lLowerArmSensor"); skeleton.createBone(boneData, lUpperArmS); */ // hip - right leg boneData.setLength(0.20); boneData.setDefaultOrientation(Quaternion(1.0, 0.0, 0.0, 0.0)); boneData.setName("rHip"); int rHip = skeleton.createBone(boneData, hip); // right upper leg boneData.setLength(0.45); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 0.0, -1.0), M_PI*90.0/180.0) * Quaternion(Vector3(-1.0, 0.0, 0.0), M_PI*90.0/180.0)); boneData.setName("rUpperLeg"); int rUpperLeg = skeleton.createBone(boneData, rHip); // right lower leg boneData.setLength(0.45); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 0.0, -1.0), M_PI*90.0/180.0) * Quaternion(Vector3(-1.0, 0.0, 0.0), M_PI*90.0/180.0)); boneData.setName("rLowerLeg"); skeleton.createBone(boneData, rUpperLeg); // hip - left leg boneData.setLength(0.20); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 1.0, 0.0), M_PI*180.0/180.0)); boneData.setName("lHip"); int lHip = skeleton.createBone(boneData, hip); // left upper leg boneData.setLength(0.45); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 0.0, -1.0), M_PI*90.0/180.0) * Quaternion(Vector3(1.0, 0.0, 0.0), M_PI*90.0/180.0)); boneData.setName("lUpperLeg"); int lUpperLeg = skeleton.createBone(boneData, lHip); // left lower leg boneData.setLength(0.45); boneData.setDefaultOrientation(Quaternion(Vector3(0.0, 0.0, -1.0), M_PI*90.0/180.0) * Quaternion(Vector3(1.0, 0.0, 0.0), M_PI*90.0/180.0)); boneData.setName("lLowerLeg"); skeleton.createBone(boneData, lUpperLeg); skeleton.setName("Default Skeleton"); skeleton.update(); //skeleton.setCurrentAsDefault(); return skeleton; }