Skip to content

Commit 644eacc

Browse files
committed
tweaks for animation, 99% there
1 parent 096552d commit 644eacc

File tree

1 file changed

+17
-22
lines changed

1 file changed

+17
-22
lines changed

src/io/MdlIO.cpp

Lines changed: 17 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)