2013-02-13 108 views
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結束,從其他地方開始,有些去了其他的地方。我究竟做錯了什麼?

回答

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),等等。

+0

它必須是每個部分3 0到1,而不是整個鏈。 – DarenW 2013-02-13 21:00:44

+0

你當然是對的。謝謝。 – us2012 2013-02-14 00:00:13