@@ -576,18 +576,19 @@ void BinScenegraphNode::AddMesh(int16_t material, int16_t mesh){
576576 meshes.push_back (std::pair (material, mesh));
577577}
578578
579- float MixTrack (LTrackCommon* track, float curFrame, uint32_t & mNextKey ){
579+ float MixTrack (LTrackCommon* track, uint32_t frameCount, float curFrame, uint32_t & mNextKey ){
580580 if (mNextKey < track->mKeys .size ()){
581581 float v = InterpolateHermite (
582- (curFrame - track->mFrames [track->mKeys [mNextKey - 1 ]].frame ) / (track->mFrames [track->mKeys [mNextKey ]].frame - track->mFrames [track->mKeys [mNextKey - 1 ]].frame ),
582+ (uint32_t )((( uint32_t ) curFrame - track->mFrames [track->mKeys [mNextKey - 1 ]].frame ) / (track->mFrames [track->mKeys [mNextKey ]].frame - track->mFrames [track->mKeys [mNextKey - 1 ]].frame ) ),
583583 track->mFrames [track->mKeys [mNextKey - 1 ]].frame ,
584584 track->mFrames [track->mKeys [mNextKey - 1 ]].value ,
585585 track->mFrames [track->mKeys [mNextKey - 1 ]].outslope ,
586586 track->mFrames [track->mKeys [mNextKey ]].frame ,
587587 track->mFrames [track->mKeys [mNextKey ]].value ,
588588 track->mFrames [track->mKeys [mNextKey ]].inslope
589589 );
590- if (std::floor (curFrame) >= track->mKeys [mNextKey ]){
590+
591+ if (std::floor (curFrame) >= track->mFrames [track->mKeys [mNextKey ]].frame ){
591592 mNextKey += 1 ;
592593 }
593594 return v;
@@ -606,24 +607,24 @@ void BinScenegraphNode::Draw(glm::mat4 localTransform, glm::mat4* instance, BinM
606607 if (animate && bin->mAnimationInformation .mLoaded && bin->mAnimationInformation .mPlaying ){
607608 // modify mtx based off of current frame
608609
609- float sx = - MixTrack (&mXScaleTrack , bin->mAnimationInformation .mCurrentFrame , mNextScaleKeyX );
610- float sy = MixTrack (&mYScaleTrack , bin->mAnimationInformation .mCurrentFrame , mNextScaleKeyY );
611- float sz = MixTrack (&mZScaleTrack , bin->mAnimationInformation .mCurrentFrame , mNextScaleKeyZ );
610+ float sx = MixTrack (&mXScaleTrack , bin-> mAnimationInformation . mFrameCount , bin->mAnimationInformation .mCurrentFrame , mNextScaleKeyX );
611+ float sy = MixTrack (&mYScaleTrack , bin->mAnimationInformation .mFrameCount , bin-> mAnimationInformation . mCurrentFrame , mNextScaleKeyY );
612+ float sz = MixTrack (&mZScaleTrack , bin->mAnimationInformation .mFrameCount , bin-> mAnimationInformation . mCurrentFrame , mNextScaleKeyZ );
612613
613- float rz = MixTrack (&mXRotTrack , bin->mAnimationInformation .mCurrentFrame , mNextRotKeyX ) * 0 . 0001533981f ;
614- float ry = MixTrack (&mYRotTrack , bin->mAnimationInformation .mCurrentFrame , mNextRotKeyY ) * 0 . 0001533981f ;
615- float rx = MixTrack (&mZRotTrack , bin->mAnimationInformation .mCurrentFrame , mNextRotKeyZ ) * 0 . 0001533981f ;
614+ float rz = MixTrack (&mXRotTrack , bin->mAnimationInformation .mFrameCount , bin-> mAnimationInformation . mCurrentFrame , mNextRotKeyX );
615+ float ry = MixTrack (&mYRotTrack , bin->mAnimationInformation .mFrameCount , bin-> mAnimationInformation . mCurrentFrame , mNextRotKeyY );
616+ float rx = MixTrack (&mZRotTrack , bin->mAnimationInformation .mFrameCount , bin-> mAnimationInformation . mCurrentFrame , mNextRotKeyZ );
616617
617- float px = - MixTrack (&mXPosTrack , bin->mAnimationInformation .mCurrentFrame , mNextPosKeyX );
618- float py = MixTrack (&mYPosTrack , bin->mAnimationInformation .mCurrentFrame , mNextPosKeyY );
619- float pz = MixTrack (&mZPosTrack , bin->mAnimationInformation .mCurrentFrame , mNextPosKeyZ );
618+ float pz = MixTrack (&mXPosTrack , bin-> mAnimationInformation . mFrameCount , bin->mAnimationInformation .mCurrentFrame , mNextPosKeyX );
619+ float py = MixTrack (&mYPosTrack , bin->mAnimationInformation .mFrameCount , bin-> mAnimationInformation . mCurrentFrame , mNextPosKeyY );
620+ float px = MixTrack (&mZPosTrack , bin-> mAnimationInformation . mFrameCount , bin->mAnimationInformation .mCurrentFrame , mNextPosKeyZ );
620621
621622 glm::mat4 animTrasform (1 .0f );
622623
623624 // animTrasform = glm::scale(animTrasform, glm::vec3(sx, sy, sz));
624- animTrasform = glm::rotate (animTrasform, rx , glm::vec3 (1 , 0 , 0 ));
625- animTrasform = glm::rotate (animTrasform, ry , glm::vec3 (0 , 1 , 0 ));
626- animTrasform = glm::rotate (animTrasform, rz , glm::vec3 (0 , 0 , 1 ));
625+ animTrasform = glm::rotate (animTrasform, glm::radians (rx * 0 . 0001533981f ) , glm::vec3 (1 , 0 , 0 ));
626+ animTrasform = glm::rotate (animTrasform, glm::radians (ry * 0 . 0001533981f ) , glm::vec3 (0 , 1 , 0 ));
627+ animTrasform = glm::rotate (animTrasform, glm::radians (rz * 0 . 0001533981f ) , glm::vec3 (0 , 0 , 1 ));
627628 animTrasform = glm::translate (animTrasform, glm::vec3 (px, py, pz));
628629
629630 mtx = *instance * localTransform * (transform * animTrasform);
@@ -806,9 +807,9 @@ std::shared_ptr<BinScenegraphNode> BinModel::ParseSceneraph(bStream::CStream* st
806807
807808
808809 current->transform = glm::scale (current->transform , scale);
809- current->transform = glm::rotate (current->transform , glm::radians (rotation.x ) * 0 .0001533981f , glm::vec3 (1 , 0 , 0 ));
810- current->transform = glm::rotate (current->transform , glm::radians (rotation.y ) * 0 .0001533981f , glm::vec3 (0 , 1 , 0 ));
811- current->transform = glm::rotate (current->transform , glm::radians (rotation.z ) * 0 .0001533981f , glm::vec3 (0 , 0 , 1 ));
810+ current->transform = glm::rotate (current->transform , glm::radians (rotation.x * 0 .0001533981f ) , glm::vec3 (1 , 0 , 0 ));
811+ current->transform = glm::rotate (current->transform , glm::radians (rotation.y * 0 .0001533981f ) , glm::vec3 (0 , 1 , 0 ));
812+ current->transform = glm::rotate (current->transform , glm::radians (rotation.z * 0 .0001533981f ) , glm::vec3 (0 , 0 , 1 ));
812813 current->transform = glm::translate (current->transform , translation);
813814
814815 stream->skip (4 *7 );
0 commit comments