生成正弦波

更新时间: 2025-04-15 13:40:55

本节要实现的是https://developer.nvidia.com/gpugems/gpugems/part-i-natural-effects/chapter-1-effective-water-simulation-physical-models,公式就在链接里

打开https://nme.babylonjs.com/ (opens new window)
首先我们把这三个节点分开得远一点,因为中间会有很多操作

# 创建4个参数

我们要做的第一件事情是创建四个参数,通过这四个参数来改变波:

  • 波长 (L):世界空间中波之间的波峰到波峰的距离。波长 L 与频率 w 的关系为 w = 2/L
  • A:振幅,波的高度
  • S: 波峰每秒向前移动的距离。将速度表示为相位常数 φ 很方便,其中 φ = S x 2/L。
  • D:垂直于波峰行进的波前的水平矢量

创建两个Float,将第一个的value改为2,type改成常量:

第二个Float的名字改为waveLength,value为0.5,并将它们相除

按住shift并拖动出窗口将这几个参数打个组,组名叫W

接下来是振幅

接下来是速度

接下来是波的传播方向

在算法中,x和y是水平的矢量,z是向上的矢量
但在babylon中,我们的x和z是水平的,y是向上的

所以我们的算法在实现的时候需要翻译一下

# 组装公式

先完成A*sin()

然后组装括号里的
从 t * φ 开始

然后组装 D·(x, y)*w
这是风向和原始x,z的点积,记住是x和z

然后将括号内都加起来

最后我们再取一个vectorMerger, 获取到原始的x,z,w

然后再将计算出的值替换到y

最后将新的xyzw连接到输出

现在右下角的平面变成正弦波了

还可以改变之前的4个参数改变波形