如何正确地为模型制作动画

How to animate model correctly

我有一个动画需要制作动画。我有一些代码示例

void CAnimationEditor::OnTimer(UINT nIDEvent)
{
    if (nIDEvent == 2)
    {
        if (_flAnimPos >= 1.0f)
            _flAnimPos = 0.0f;
        std::chrono::duration<float> elapsed_seconds = std::chrono::steady_clock::now() - _start;
        float time = elapsed_seconds.count();
        float rate = (float)_FPS / m_pAnimation->GetFramesCount();
        _flAnimPos += time * rate;
        if (_flAnimPos >= 1.0f)
            _flAnimPos = 0.0f;
        m_pAnimation->Update();
        m_oglAnimationPreview.Draw();
        _start = std::chrono::steady_clock::now();
    }
    CDialog::OnTimer(nIDEvent);
}

我点击复选框并设置定时器

SetTimer(2, 0, NULL);

正确的动画方式是 "fill" _flAnimPos1.0f / rate 秒内从 01

例如,我有一个由 8 帧组成的动画。如果我将 _FPS 设置为 16,动画必须在 0.5 秒内完成一个完整的循环。

我找到了解决方案。时间点传递不正确。正确的是:

if (nIDEvent == 2)
{
    _start = std::chrono::steady_clock::now();
    std::chrono::duration<float> elapsed_seconds = _start - _last;
    float time = elapsed_seconds.count();
    float rate = (float)_FPS / m_pAnimation->GetFramesCount();
    _flAnimPos += time * rate;
    if (_flAnimPos > 1.0f)
        _flAnimPos = fmod(_flAnimPos, 1.0f);
    m_pAnimation->Update();
    m_oglAnimationPreview.Draw();
    _last = _start;
}