【发布时间】:2015-10-07 17:59:44
【问题描述】:
我正在尝试使用着色器实现 Fruchterman Reingold 模拟。在着色器中实现计算部分之前,我用 javascript 编写了它。它完全按照我的预期工作,如下所示:
http://jaredmcqueen.github.io/gpgpu-force-direction/canvas_app.html
在着色器中实现计算部分时,我得到了一个在屏幕上随机漂移的稳定结构。我无法弄清楚是什么排斥力/吸引力导致我的图表如此不可预测地浮动:
http://jaredmcqueen.github.io/gpgpu-force-direction/gpgpu_app.html
物理学的核心来自排斥/吸引函数:
//fr(x) = (k*k)/x;
vec3 addRepulsion(vec3 self, vec3 neighbor){
vec3 diff = self - neighbor;
float x = length( diff );
float f = ( k * k ) / x;
return normalize(diff) * f;
}
//fa(x) = (x*x)/k;
vec3 addAttraction(vec3 self, vec3 neighbor){
vec3 diff = self - neighbor;
float x = length( diff );
float f = ( x * x ) / k;
return normalize(diff) * f;
}
任何关于为什么 gpgpu、基于模拟的着色器会表现得看似随机的见解将不胜感激。
【问题讨论】:
标签: glsl webgl shader simulation physics