cri*_*ken 6 c++ interpolation linear-interpolation
我有这个作为我的lerp函数:
Vec2f lerp(float t, Vec2f a, Vec2f b){
return (1-t)*a + t*b;
}
Run Code Online (Sandbox Code Playgroud)
我在下面有以下代码,我希望这会导致"补间":
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;
Run Code Online (Sandbox Code Playgroud)
但我得到的是一个"不连续的补间",它不是从A到B的lerp结束的最后一点开始,而是从其他地方开始,有些则用于其他lerps.我究竟做错了什么?
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)等。
| 归档时间: |
|
| 查看次数: |
18908 次 |
| 最近记录: |