在我的一个项目中,我使用以下smoothstep()
函数:
float smoothstep(float a, float b, float m, int n)
{
for(int i = 0 ; i < n ; i++)
{
m = m * m * (3 - 2 * m);
}
return a + (b - a) * m;
}
虽然效果很好,但它有两个缺点:
n
的大值)n = 1.5
)是否有替代方案(不包括预先计算点然后进行插值)以提供更好的性能(和相同的行为),或者是另一种能够提供近似值的函数?
答案 0 :(得分:0)
您应该能够预先计算“m”项,因为它不依赖于a或b,并且假设您在整个插值中执行此操作,这将显着加快您的代码速度。
或者,您可以使用内置的MathHelper.Smoothstep方法,该方法提供三次插值,而不是您从版本中获得的线性插值。该类中还有其他更先进的插补器。