1

在我的一个项目中,我使用以下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:)

是否有提供更好性能(和相同行为)的替代方法(不包括预先计算点然后进行插值),或者另一个函数提供了很好的近似值?

4

1 回答 1

0

您应该能够预先计算“m”项,因为它不依赖于 a 或 b,并且假设您在整个插值上执行此操作,这应该会显着加快您的代码速度。

或者,您可以使用内置的 MathHelper.Smoothstep 方法,该方法提供三次插值,而不是您从版本中获得的线性插值。该类中还有其他更高级的插值器。

于 2013-05-01T21:32:21.930 回答