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 に答える