摆动物体的比例

我能够使用我写的缩放函数来缩放对象。 它在内部建立与每个顶点相乘的matrix来转换它们。 我给定比例函数的参数告诉它多less比例作为当前比例的因素

我希望我的物体的尺度在两个值之间平滑地摆动,所以我用Sin波来构建我的缩放因子,即:

1 + amplitude * (Mathf.Sin(2 * Mathf.PI * frequency* Time.time) - Mathf.Sin(2 * Mathf.PI * frequency * (Time.time - Time.deltaTime))) 

结果看起来非常接近我想要的,但随着每次振荡,对象变得比以前稍小。

问题在于我的函数是这样编写的,它将顶点作为“当前”尺度的一个因子进行缩放,这个尺寸总是在变化。

通常,您总是将转换应用于原始未缩放/未转换的对象。

从理论上讲,在你的情况下,因为你只是简单地计算一个缩放因子,并且假设它从不为零,所以在应用新缩放因子之前,总是可以反转缩放因子。

像这样(伪代码):

 if (/* sOld isn't set */) { sOld = 1; } sOldInverse = 1/sOld; // assuming sOld is never 0 s = (result of your function); s = sOldInverse * s; // the new scalling factor sOld = s; // store somewhere until the next update 

但是 ,在实践中,您可能会遇到数值精度问题。 既然你没有原始的规模,微小的错误可能会随着时间积累,导致错误的结果。