我将其作为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的束缚结束的最后一点开始,而是从别的地方开始,而其他的则开始。我究竟做错了什么?
最佳答案
在插值函数中,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)
等。
关于c++ - "tween"的lerp实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14853845/