//
----------------------------------------------------------------------
// 说明:更新相机震动动画
// 说明:更新相机震动动画
//
原理:将时间映射到曲线函数Sin上
// 映射公式: (2 * PI) / (1 / Frequency) = x / Age
// 计算偏移量公式: offset = Amplitude * Sin(x) * (1 - Age / Duration)
// ----------------------------------------------------------------------
// 记录当前累计震动时间
m_CurVibParam.fAge += CGameProcedure::s_pTimeSystem -> GetDeltaTime() / 1000 ;
// 若超时则归位
if (m_CurVibParam.fAge > m_CurVibParam.fDuration)
{
_SetStatus(NORMAL_STATUS);
return ;
}
// 按照公式求偏移量
FLOAT offset = m_CurVibParam.fAmplitude
* Ogre::Math::Sin(m_CurVibParam.fAge * Ogre::Math::TWO_PI * m_CurVibParam.fFrequency)
* ( 1 - m_CurVibParam.fAge / m_CurVibParam.fDuration);
// 进行偏移产生震动效果
vLookatPos.y += offset;
vEyePos.y += offset;
// 映射公式: (2 * PI) / (1 / Frequency) = x / Age
// 计算偏移量公式: offset = Amplitude * Sin(x) * (1 - Age / Duration)
// ----------------------------------------------------------------------
// 记录当前累计震动时间
m_CurVibParam.fAge += CGameProcedure::s_pTimeSystem -> GetDeltaTime() / 1000 ;
// 若超时则归位
if (m_CurVibParam.fAge > m_CurVibParam.fDuration)
{
_SetStatus(NORMAL_STATUS);
return ;
}
// 按照公式求偏移量
FLOAT offset = m_CurVibParam.fAmplitude
* Ogre::Math::Sin(m_CurVibParam.fAge * Ogre::Math::TWO_PI * m_CurVibParam.fFrequency)
* ( 1 - m_CurVibParam.fAge / m_CurVibParam.fDuration);
// 进行偏移产生震动效果
vLookatPos.y += offset;
vEyePos.y += offset;