gpt4 book ai didi

c++ - 计时器的 Lerping 问题

转载 作者:太空宇宙 更新时间:2023-11-04 13:55:26 24 4
gpt4 key购买 nike

当我在我的游戏引擎中运行对象时,我一直遇到与计时器相关的问题。渐变几乎是正确的,当我将渐变应用于移动或旋转的物体时,它很好,除了每隔几秒钟它看起来好像物体在继续平稳移动之前快速闪烁到它之前的位置。

在窗口模式下运行引擎可以得到 1500~fps,但如果我在全屏模式下运行并将 vsync 钳位到 60fps,则故障会更频繁地发生。

我一直在努力寻找关于 lerping 的良好资源或解释,以及如何改进我所拥有的。

为了计算我使用的跳动间隙:

float World::GetTickGap()
{
float gap = (float) (TimeMs() - m_lastTick) / m_tickDelay;
return gap > 1.f ? 1.f : gap;
}

我的更新函数:

m_currentTick = TimeMs();
if(m_currentTick > m_lastTick+m_tickDelay)
{
m_lastTick = m_currentTick;

//Update actors

}

然后在渲染每个 Actor 时,我会为他们提供滴答间隙,让他们在他们的位置之间移动。

我的 lerping 函数:

float math::Lerp(float a, float b, float t)
{
return a + t*(b-a);
}

还有一个调用 lerping 函数的例子:

renderPosition.x = (math::Lerp(m_LastPosition.x, m_Position.x, tickDelay));

我不确定从哪里开始尝试解决这个问题。据我所知,这是功能的时间问题。尽管其他任何事情都会导致性能以恒定速率小幅下降吗?

如果您对此问题有任何帮助,我们将不胜感激。 :)

最佳答案

我真的无法根据您发布的内容重建您的代码

但我记得每帧不止一次调用你的时间函数通常是个坏主意。你似乎会那样做。试着想一想这会产生什么影响。

例如这可能意味着“update Actors”循环与“tickGap”间隔不同步,并且 actors 以 0 间隔第二次更新。

关于c++ - 计时器的 Lerping 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21705939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com