6

我有这个作为我的lerp功能:

  Vec2f lerp(float t, Vec2f a, Vec2f b){
      return (1-t)*a + t*b;
  }

我在下面有以下代码,我希望这会产生“补间”:

    Vec2f a(0,0);
    Vec2f b(3,4);
    Vec2f c(5,4);
    Vec2f d(5,0);

    if( i < 100 ){
        if(i <= 30){
            ball.pos = lerp(i, a, b);
        }
        else if(i > 30 && i < 80){
            ball.pos = lerp(i, b, c);
        }
        else {
            ball.pos = lerp(i, a, d);
        }
    } i += 1;

但我得到的是一个“不连续的补间”,即不是从 A 到 B 的 lerp 结束的最后一点开始,而是从其他地方开始,有些是针对其他 lerp 的。我究竟做错了什么?

4

1 回答 1

4

t在您的插值函数中必须介于 0 和 1 之间,但您传递的值介于 0 和 100 之间。将调用更改为lerp(i/100.0f, a, b)等等。(重要的是您将 100.0 指定为浮点文字,而不是整数文字!)

正如DarenW正确指出的那样,您必须为每个段覆盖从0到1的范围以获得所需的效果,即在您的情况下,lerp(i/30.0f, a, b),lerp((i-30)/50.0f, a, b)等。

于 2013-02-13T12:46:34.313 回答