【发布时间】:2014-06-05 20:41:00
【问题描述】:
假设我正在尝试移动 3d 模型并保持简单,我将在 x 轴上移动它。我从位置 0.0 开始并将其移动到位置 10.0。
问题在于,根据我移动的速度,我最终会出现位置错误,这意味着我需要快速回到位置 10.0。
例如,如果速度为 3.0,那么我将每帧的 x 位置加 3.0 0.0 3.0 6.0 9.0 12.0
如果我想在达到 10.0 时停止,我可以使用此代码
if(model.x <= 10.0f)
model.x += speed * FrameTime;
else
model.x = 10.0f;
但是模型会在它意识到它已经超过 10.0 之前到达位置 12.0
这也意味着我移动得越快,错误就会越大。
任何人都可以提出一个更好的方法来移动模型,以便消除或至少减少错误,这样我的模型看起来就不会反弹。
【问题讨论】:
-
为什么不在应用更新后将其限制为 10.0? (例如
if (model.x > 10.0f) model.x = 10.0f;当然,当它突然卡到 10.0f 时会产生不自然的抖动。如果这是不可接受的,您可以添加某种阻尼器。 -
上面的代码正是这样做的,这就是我试图摆脱的急躁。你能扩大“阻尼器”吗
-
@Rob85:不,它没有。上面的代码检查尝试在 在进行实际更新之前对其进行钳制 - 这意味着如果更新将其增加到超过
10.0,它将不知道直到下一帧。 -
@Rob85:不,上面的代码并没有完全做到这一点。唯一一次捕捉到 10.0 是第二次发生此更新。夹紧到 10.0f 将是一个单独的
if (...)在您显示的两个分支之后应用。事实上,您甚至不需要任何这些分支。只需使用:model.x += speed * FrameTime; if (model.x > 10.0f) model.x = 10.0f; -
啊,是的,我明白了,所以在我绘制下一帧之前,我将它捕捉到 10.0,这应该几乎可以解决问题。我明白。我会试试看,谢谢你们俩
标签: java android c++ opengl-es opengl-es-2.0