Math 基于时间t的初始谱实时海浪运动生成
我花了大约一周的时间使用gerstner waves渲染了一个简单的海洋,但在平铺方面遇到了问题,所以我决定开始正确地渲染它们,并将脚趾浸入使用iFFT渲染高度场的浑浊水域中 有很多文章解释了基本要点- 1计算频谱 2使用此选项创建高度场,使用ifft将频率域转换为空间域-使用时间t设置动画 从这段旅程开始,我就学习了一些东西,比如复平面,复指数方程,更详细的FFT等,但是在创建初始光谱的初始步骤之后,渲染了一个由guassian数组成的纹理,平均值为0,sd为1,经过phillips光谱过滤,我仍然完全迷路了 我创建初始数据的代码如下:Math 基于时间t的初始谱实时海浪运动生成,math,graphics,glsl,fft,ifft,Math,Graphics,Glsl,Fft,Ifft,我花了大约一周的时间使用gerstner waves渲染了一个简单的海洋,但在平铺方面遇到了问题,所以我决定开始正确地渲染它们,并将脚趾浸入使用iFFT渲染高度场的浑浊水域中 有很多文章解释了基本要点- 1计算频谱 2使用此选项创建高度场,使用ifft将频率域转换为空间域-使用时间t设置动画 从这段旅程开始,我就学习了一些东西,比如复平面,复指数方程,更详细的FFT等,但是在创建初始光谱的初始步骤之后,渲染了一个由guassian数组成的纹理,平均值为0,sd为1,经过phillips光谱过滤,
float PhillipsSpectrum(vec2 k){
//kLen is the length of the vector from the centre of the tex
float kLen = length(k);
float kSq = kLen * kLen;
// amp is wave amplitude, passed in as a uniform
float Amp = amplitude;
//L = velocity * velcoity / gravity
float L = (velocity*velocity)/9.81;
float dir = dot(normalize(waveDir),normalize(k));
return Amp * (dir*dir) * exp(-1.0/(kSq * L * L))/ (kSq * kSq) ;
}
void main(){
vec3 sums;
//get screenpos - center is 0.0 and ranges from -0.5 to 0.5 in both
//directions
vec2 screenPos = vec2(gl_FragCoord.x,gl_FragCoord.y)/texSize - vec2(0.5,0.5);
//get random Guass number
vec2 randomGuass = vec2(rand(screenPos),rand(screenPos.yx));
//use phillips spectrum as a filter depending on position in freq domain
float Phil = sqrt(PhillipsSpectrum(screenPos));
float coeff = 1.0/sqrt(2.0);
color = vec3(coeff *randomGuass.x * Phil,coeff * randomGuass.y * Phil,0.0);
}
这将创建如下纹理:
现在我完全不知道如何:
a从初始纹理导出三个方向的光谱
b根据幻灯片5中提到的时间t设置动画
我可能是完全愚蠢的,忽略了一些非常明显的事情——我已经看了一堆文件,甚至在了解了公式的含义之后,也迷失在公式中。请帮助。您应该阅读一些关于这方面的文章,这些幻灯片没有足够的信息,。。。在我看来,纹理根本不是纹理,但波的波长和振幅的统计分布不确定k和粗体k之间的区别这是一个2D光谱,因此应用2D IDFFT,您将从中获得ω和参数,因此现在只需将时间添加到波方程中,并对每个位置和位置求和应该是这样的,但我第一次看到这一点,所以我也可能在幻灯片上遗漏了一些更新图表。。。你得到了方程,如果我得到正确的话,纹理是H0k,在IDFFT之后,它被称为Hk,所以只要计算两个方程的组合。。。顺便说一句,你的输出纹理与他们的不匹配。你的纹理在两个轴上是对称的。他们的纹理是旋转的,在单轴上是对称的。。。所以你的波浪看起来有点像differently@spektre谢谢你的评论,不过你说的很明显,是的,这实际上是波的统计分布,在应用fft之前更新。它是对称的,因为我使用不同的输入VAL来创建phillips光谱。谢天谢地,我已经找到了演示文稿的源代码,现在正在浏览,不过这是非常疯狂的东西。再次感谢。