前言
FFTOcean是一种基于统计学模型的水面模拟算法,原论文为SIGGRAPH 的一篇文章Simulating Ocean Water。
先看一下效果
一、需要设置的一些参数
首先文章假设节点平面坐标X=(x,z),需要根据X来计算高度y。接着需要设定的参数有:海洋的实际大小(Lx,Lz),将海洋划分为网格的大小(N,M),海洋环境中的风速V,以及风向Vdir,还有幅度A。
二、高度场函数推导
文章先是定义高度场的计算公式为:
其中
为了方便实现,我们假设
故可以把公式(2)改写为
现在公式(1)中还需要计算的就只有h0(K)了,即公式(5)中的h0'(n',m'),h0'*(n',m')为h0'(n',m')的共轭复数,因此不需要额外推导。
公式(6)中,V和W分别为风速和风向,需要自行设定。
高斯随机数的代码为:
float urand()
{
return rand() / (float)RAND_MAX;
}
// Generates Gaussian random number with mean 0 and standard deviation 1.
float gauss()
{
float u1 = urand();
float u2 = urand();
if (u1 <