求世界坐标处格斯特纳波的高度

问题描述 投票:0回答:1

使用 GPU Gems 文章从物理模型进行有效的水模拟我已将 Gerstner Waves 实现到 UE4 中,我在 GPU 上构建了该函数用于细分网格位移,并在代码中构建了该函数用于对波浪的高度进行采样,但是我遇到的问题是,公式本质上的点会远离其原始点,因此当使用 gerstner 函数获取点的高度时,它不一定位于您正在采样的点,因此提供了不正确的高度对于该坐标。

所以我需要以某种方式求解格斯特纳函数中实际上与世界位置对齐的点。我已经自学了足够多的知识来实现波浪,但我坚持这个解决方案,尽管我怀疑有某种矩阵或方法来获取输入,应用余弦值并将其用作实际点的查找取样。非常感谢任何想法和帮助。

供参考格斯特纳波浪公式

公式图像

[2]

Q = Slope
 L = WaveLength
    A = Amplitude  
    D = Vector2 Direction  
    x = x world coordinate  
    y = y world coordinate  
    t = time  
    Where Qi = Q/wi * A * NumWaves  
    Where wi = 2pi/L  
    Where phase = Speed * 2/L
math simulation physics
1个回答
0
投票

6岁了,但我不妨回答一下 如果您有一个简单的二维位移函数,例如:

gerstner wave displacement

其中输入

t
产生单个波的输出 x 和 y

您可以回溯到调整后的 t 值,该值会生成 x,y 对,其中输出 x 接近原始 t,这意味着输出 y 是该 t 值处高度的近似值

结果的x值

伪代码(在 godots 着色器语言中):

const int ITERATIONS = 4; // 3 or 4 is good enough for my uses
float steepness = 0.6;
float t = TIME;

float adjust_t = 0.0;
for (int i = 0; i < ITERATIONS; ++i) {
    adjust_t = -cos(t + adjust_t) * steepness;
}

// then compute the actual displacement with adjusted t value
vec2 displace = vec2(cos(t + adjust_t), sin(t + adjust_t)) * steepness;

(陡度从 0.0 到 1.0,决定峰的锐度)

(我参考了本教程来制作我的格斯特纳波函数)

© www.soinside.com 2019 - 2024. All rights reserved.