当我在游戏引擎中搜索对象时,我遇到了与计时器相关的问题。 lerping几乎是正确的,当我将lerping应用于一个移动或旋转的物体时,它很好,除了每隔几秒钟就会看起来好像物体在继续平稳移动之前快速闪烁到它的先前位置。
在窗口模式下运行引擎可以得到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
}
然后,当渲染每个演员时,我给他们在他们的位置之间缩放的刻度间隙。
我的演绎功能:
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));
我不确定从哪里开始尝试解决此问题。据我所知,这是功能的时间问题。虽然还有什么能够以恒定的速度导致性能小幅下滑吗?
对此问题的任何帮助将不胜感激。 :)
答案 0 :(得分:0)
我真的无法根据你发布的内容重建你的代码
但我记得,每帧调用你的时间函数不止一次是一个坏主意。 你好像这样做。试着想一想它有什么影响。
E.g。这可能意味着"更新Actors"循环与" tickGap"不同步区间和演员第二次更新,差距为0。