void CalCoreTrack::translationCompressibility( bool * transRequiredResult, bool * transDynamicResult, bool * highRangeRequiredResult, float threshold, float highRangeThreshold, CalCoreSkeleton * skel ) { * transRequiredResult = false; * transDynamicResult = false; * highRangeRequiredResult = false; unsigned int numFrames = m_keyframes.size(); CalCoreBone * cb = skel->getCoreBone( m_coreBoneId ); const CalVector & cbtrans = cb->getTranslation(); CalVector trans0; float t2 = threshold * threshold; unsigned int i; for( i = 0; i < numFrames; i++ ) { CalCoreKeyframe * keyframe = m_keyframes[ i ]; const CalVector & kftrans = keyframe->getTranslation(); if( fabsf( kftrans.x ) >= highRangeThreshold || fabsf( kftrans.y ) >= highRangeThreshold || fabsf( kftrans.z ) >= highRangeThreshold ) { * highRangeRequiredResult = true; } if( i == 0 ) { trans0 = keyframe->getTranslation(); } else { float d2 = DistanceSquared( trans0, kftrans ); if( d2 > t2 ) { * transDynamicResult = true; } } float d2 = DistanceSquared( cbtrans, kftrans ); if( d2 > t2 ) { * transRequiredResult = true; } } }
void CalMixer::applyBoneAdjustments() { CalSkeleton * pSkeleton = m_pModel->getSkeleton(); std::vector<CalBone *>& vectorBone = pSkeleton->getVectorBone(); unsigned int i; for( i = 0; i < m_numBoneAdjustments; i++ ) { CalMixerBoneAdjustmentAndBoneId * ba = & m_boneAdjustmentAndBoneIdArray[ i ]; CalBone * bo = vectorBone[ ba->boneId_ ]; CalCoreBone * cbo = bo->getCoreBone(); if( ba->boneAdjustment_.flags_ & CalMixerBoneAdjustmentFlagMeshScale ) { bo->setMeshScaleAbsolute( ba->boneAdjustment_.meshScaleAbsolute_ ); } if( ba->boneAdjustment_.flags_ & CalMixerBoneAdjustmentFlagPosRot ) { const CalVector & localPos = cbo->getTranslation(); CalVector adjustedLocalPos = localPos; CalQuaternion adjustedLocalOri = ba->boneAdjustment_.localOri_; static float const scale = 1.0f; float rampValue = ba->boneAdjustment_.rampValue_; static bool const replace = true; static float const unrampedWeight = 1.0f; bo->blendState( unrampedWeight, adjustedLocalPos, adjustedLocalOri, scale, replace, rampValue ); } } }
void CalCoreAnimation::fillInvalidTranslations( CalCoreSkeleton * skel ) { std::list<CalCoreTrack *>::iterator iteratorCoreTrack; for(iteratorCoreTrack = m_listCoreTrack.begin(); iteratorCoreTrack != m_listCoreTrack.end(); ++iteratorCoreTrack) { CalCoreTrack * tr = * iteratorCoreTrack; int boneId = tr->getCoreBoneId(); assert( boneId != -1 ); CalCoreBone * bo = skel->getCoreBone( boneId ); if( bo ) { CalVector trans = bo->getTranslation(); tr->fillInvalidTranslations( trans ); } } }