Just reviving an old thread here

I am currently in the process of creating a loader for JOGL using the GL4JAVA port of Nehe lesson31 as a basis for my loader.
I have completed the loader but when I try to animate the Model, the Model seems to explode outwards with vertices every where. When I remove the animate function the model loads thing with no Animation.
Did anybody complete their Milkshape Loader with Skeletal Animation ?
If not can anybody have a wee look at my Animation code and see if i have made any mistakes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| void advancedAnimation(){
double timer=time.getTime();
if(timer>m_totalTime){ if(m_looping){ restart(); timer=0; } else{ timer=m_totalTime; } }
for (int i=0;i<m_numJoints;i++){ float[] transvec= new float[3]; Matrix transform=new Matrix(); int frame;
Joint joint=m_pJoints[i];
if (joint.m_numTranslationKeyframes==0 && joint.m_numTranslationKeyframes==0){ joint.m_final.set(joint.m_absolute.getMatrix()); continue; } frame=joint.m_currentTranslationkeyframe;
while (frame < joint.m_numTranslationKeyframes && joint.m_pTranslationkeyframes[frame].m_time < timer) { frame++; } joint.m_currentTranslationkeyframe = frame; if (frame==0){ transvec=joint.m_pTranslationkeyframes[0].m_parameters; } else if (frame==joint.m_numTranslationKeyframes) transvec=joint.m_pTranslationkeyframes[frame-1].m_parameters; else{ Keyframe curFrame=joint.m_pTranslationkeyframes[frame]; Keyframe prevFrame=joint.m_pTranslationkeyframes[frame-1];
float timeDelta=curFrame.m_time-prevFrame.m_time; float interpvalue=(float)((timer-prevFrame.m_time)/timeDelta);
transvec[0]=prevFrame.m_parameters[0]+(curFrame.m_parameters[0] -prevFrame.m_parameters[0])*interpvalue; transvec[1]=prevFrame.m_parameters[1]+(curFrame.m_parameters[1] -prevFrame.m_parameters[1])*interpvalue; transvec[2]=prevFrame.m_parameters[2]+(curFrame.m_parameters[2] -prevFrame.m_parameters[2])*interpvalue; }
frame=joint.m_currentRotationkeyframe;
while (frame < joint.m_numRotationKeyframes && joint.m_pRotationkeyframes[frame].m_time < timer) { frame++; } joint.m_currentRotationkeyframe=frame; if (frame==0){ transform.setRotationRadians(joint.m_pRotationkeyframes[0].m_parameters); } else if (frame==joint.m_numRotationKeyframes) transform.setRotationRadians(joint.m_pRotationkeyframes[frame-1].m_parameters); else{ Keyframe curFrame=joint.m_pRotationkeyframes[frame]; Keyframe prevFrame=joint.m_pRotationkeyframes[frame-1];
float timeDelta=curFrame.m_time-prevFrame.m_time; float interpvalue=(float)((timer-prevFrame.m_time)/timeDelta);
Quaternion qPrev= new Quaternion(prevFrame.m_parameters); Quaternion qCur= new Quaternion(curFrame.m_parameters); Quaternion qFinal = new Quaternion(qPrev,qCur,interpvalue); transform.setRotationQuaternion(qFinal); }
transform.setTranslation(transvec);
Matrix relativeFinal=new Matrix(joint.m_relative.getMatrix()); relativeFinal.postMultiply(transform);
if (joint.m_parent==-1){ joint.m_final.set(relativeFinal.getMatrix()); } else{ joint.m_final.set(m_pJoints[joint.m_parent].m_final.getMatrix()); joint.m_final.postMultiply(relativeFinal); } }
} |
Thanks in advance
*****EDIT******
Heres a screen capture of my app running with the Animation function taken out
http://www.honours.pwp.blueyonder.co.uk/noAnim.jpgWith the Animation function put in
http://www.honours.pwp.blueyonder.co.uk/probVertsEverywhere.jpg*************Another edit**********
Messed about with my animation function, got some sort of animation but it seems like the had is coming out of the models chest and the arms and legs look weird
http://www.honours.pwp.blueyonder.co.uk/probsweirdAnim.jpgMaybe a problem with my Matrix class or Quaternion class