@@ -596,16 +596,16 @@ namespace MDL {
596596 mSkeletonRenderer .mPaths .clear ();
597597 for (int i = 0 ; i < skeleton.size (); i++){
598598 if (mSkeleton [i].ParentIndex != -1 ){
599- skeleton[i] = skeleton[mSkeleton [i].ParentIndex ] * (skeletalAnimation != nullptr && skeletalAnimation->mJointAnimations .size () > i ? skeletalAnimation->GetJoint (mSkeleton [i].Local , i) : mSkeleton [i].Local );
599+ skeleton[i] = skeleton[mSkeleton [i].ParentIndex ] * (skeletalAnimation != nullptr && i < skeletalAnimation->mJointAnimations .size () ? skeletalAnimation->GetJoint (mSkeleton [i].Local , i) : mSkeleton [i].Local );
600600 mSkeletonRenderer .mPaths .push_back ({
601601 { glm::vec3 (skeleton[mSkeleton [i].ParentIndex ][3 ].z , skeleton[mSkeleton [i].ParentIndex ][3 ].y , skeleton[mSkeleton [i].ParentIndex ][3 ].x ), {0xFF , 0x00 , 0xFF , 0xFF }, 6400 , -1 },
602602 { glm::vec3 (skeleton[i][3 ].z , skeleton[i][3 ].y , skeleton[i][3 ].x ), {0xFF , 0x00 , 0xFF , 0xFF }, 6400 , -1 }
603603 });
604604 } else {
605- skeleton[i] = mSkeleton [i].Local ;
605+ skeleton[i] = (skeletalAnimation != nullptr && i < skeletalAnimation-> mJointAnimations . size () ? skeletalAnimation-> GetJoint ( mSkeleton [i].Local , i) : mSkeleton [i]. Local ) ;
606606 mSkeletonRenderer .mPaths .push_back ({
607- { glm::vec3 (skeleton[i][3 ].z , skeleton[i][3 ].y , skeleton[i][3 ].x ), {0xFF , 0x00 , 0xFF , 0xFF }, 10400 , -1 },
608- { glm::vec3 (skeleton[i][3 ].z , skeleton[i][3 ].y , skeleton[i][3 ].x ), {0xFF , 0x00 , 0xFF , 0xFF }, 10400 , -1 }
607+ { glm::vec3 (skeleton[i][3 ].z , skeleton[i][3 ].y , skeleton[i][3 ].x ), {0xFF , 0x00 , 0xFF , 0xFF }, 12800 , -1 },
608+ { glm::vec3 (skeleton[i][3 ].z , skeleton[i][3 ].y , skeleton[i][3 ].x ), {0xFF , 0x00 , 0xFF , 0xFF }, 12800 , -1 }
609609 });
610610 }
611611 }
@@ -714,9 +714,7 @@ namespace MDL {
714714 if (joint.PositionZ .mKeys .size () > 0 ) translation.z = MixTrack (joint.PositionZ , mTime , joint.mPreviousPosKeyZ , joint.mNextPosKeyZ );
715715
716716 keyframe = glm::scale (keyframe, scale);
717- keyframe = glm::rotate (keyframe, rotEuler.z , glm::vec3 (0 .0f , 0 .0f , 1 .0f ));
718- keyframe = glm::rotate (keyframe, rotEuler.y , glm::vec3 (0 .0f , 1 .0f , 0 .0f ));
719- keyframe = glm::rotate (keyframe, rotEuler.x , glm::vec3 (1 .0f , 0 .0f , 0 .0f ));
717+ keyframe *= glm::toMat4 (glm::quat (rotEuler));
720718 keyframe = glm::translate (keyframe, translation);
721719
722720 return keyframe;
@@ -761,22 +759,19 @@ namespace MDL {
761759
762760 mJointAnimations .resize (jointCount);
763761
764- for (int f = 0 ; f < frameCount; f++){
765- for (int j = 0 ; j < jointCount; j++){
766- JointTrack& joint = mJointAnimations [j];
767-
768- joint.ScaleX .LoadTrackEx (stream, scaleKeyframeOffset, beginIndices[j][0 ], trackFlags[j][0 ].second , true , trackFlags[j][0 ].first == 0x80 );
769- joint.ScaleY .LoadTrackEx (stream, scaleKeyframeOffset, beginIndices[j][1 ], trackFlags[j][1 ].second , true , trackFlags[j][1 ].first == 0x80 );
770- joint.ScaleZ .LoadTrackEx (stream, scaleKeyframeOffset, beginIndices[j][2 ], trackFlags[j][2 ].second , true , trackFlags[j][2 ].first == 0x80 );
771-
772- joint.RotationX .LoadTrackEx (stream, rotationKeyframeOffset, beginIndices[j][3 ], trackFlags[j][3 ].second , true , trackFlags[j][3 ].first == 0x80 , 2 );
773- joint.RotationY .LoadTrackEx (stream, rotationKeyframeOffset, beginIndices[j][4 ], trackFlags[j][4 ].second , true , trackFlags[j][4 ].first == 0x80 , 2 );
774- joint.RotationZ .LoadTrackEx (stream, rotationKeyframeOffset, beginIndices[j][5 ], trackFlags[j][5 ].second , true , trackFlags[j][5 ].first == 0x80 , 2 );
762+ for (int j = 0 ; j < jointCount; j++){
763+ JointTrack& joint = mJointAnimations [j];
764+ joint.ScaleX .LoadTrackEx (stream, scaleKeyframeOffset, beginIndices[j][0 ], trackFlags[j][0 ].second , true , trackFlags[j][0 ].first == 0x80 );
765+ joint.ScaleY .LoadTrackEx (stream, scaleKeyframeOffset, beginIndices[j][1 ], trackFlags[j][1 ].second , true , trackFlags[j][1 ].first == 0x80 );
766+ joint.ScaleZ .LoadTrackEx (stream, scaleKeyframeOffset, beginIndices[j][2 ], trackFlags[j][2 ].second , true , trackFlags[j][2 ].first == 0x80 );
775767
776- joint.PositionX .LoadTrackEx (stream, positionKeyframeOffset, beginIndices[j][6 ], trackFlags[j][6 ].second , true , trackFlags[j][6 ].first == 0x80 );
777- joint.PositionY .LoadTrackEx (stream, positionKeyframeOffset, beginIndices[j][7 ], trackFlags[j][7 ].second , true , trackFlags[j][7 ].first == 0x80 );
778- joint.PositionZ .LoadTrackEx (stream, positionKeyframeOffset, beginIndices[j][8 ], trackFlags[j][8 ].second , true , trackFlags[j][8 ].first == 0x80 );
779- }
768+ joint.RotationX .LoadTrackEx (stream, rotationKeyframeOffset, beginIndices[j][3 ], trackFlags[j][3 ].second , true , trackFlags[j][3 ].first == 0x80 , 2 );
769+ joint.RotationY .LoadTrackEx (stream, rotationKeyframeOffset, beginIndices[j][4 ], trackFlags[j][4 ].second , true , trackFlags[j][4 ].first == 0x80 , 2 );
770+ joint.RotationZ .LoadTrackEx (stream, rotationKeyframeOffset, beginIndices[j][5 ], trackFlags[j][5 ].second , true , trackFlags[j][5 ].first == 0x80 , 2 );
771+
772+ joint.PositionX .LoadTrackEx (stream, positionKeyframeOffset, beginIndices[j][6 ], trackFlags[j][6 ].second , true , trackFlags[j][6 ].first == 0x80 );
773+ joint.PositionY .LoadTrackEx (stream, positionKeyframeOffset, beginIndices[j][7 ], trackFlags[j][7 ].second , true , trackFlags[j][7 ].first == 0x80 );
774+ joint.PositionZ .LoadTrackEx (stream, positionKeyframeOffset, beginIndices[j][8 ], trackFlags[j][8 ].second , true , trackFlags[j][8 ].first == 0x80 );
780775 }
781776 }
782777};
0 commit comments