@@ -11,6 +11,9 @@ uniform float RestLengthVert;
11
11
uniform float RestLengthDiag;
12
12
uniform float DeltaT = 0.000005 ;
13
13
uniform float DampingConst = 0.1 ;
14
+ uniform bool HasWind = true;
15
+ uniform float WindStrength = 2 ;
16
+ uniform vec3 WindDir = vec3 (4 , 0 , 2 );
14
17
15
18
layout (std430, binding= 0 ) buffer PosIn {
16
19
vec4 PositionIn[];
@@ -24,6 +27,9 @@ layout(std430, binding=2) buffer VelIn {
24
27
layout (std430, binding= 3 ) buffer VelOut {
25
28
vec4 VelocityOut[];
26
29
};
30
+ layout (std430, binding= 4 ) buffer NormIn {
31
+ vec4 Normal[];
32
+ };
27
33
28
34
void main() {
29
35
uvec3 nParticles = gl_NumWorkGroups * gl_WorkGroupSize;
@@ -81,6 +87,18 @@ void main() {
81
87
82
88
force += - DampingConst * v;
83
89
90
+ if (HasWind)
91
+ {
92
+ vec3 normalized_wind_dir;
93
+ if (WindDir == vec3 (0 .0f, 0 .0f, 0 .0f))
94
+ normalized_wind_dir = glm:: vec3 (0 .0f, 0 .0f, 0 .0f);
95
+ else
96
+ normalized_wind_dir = normalize (WindDir);
97
+
98
+ vec3 f_wind = WindStrength * dot (Normal[idx].xyz, normalized_wind_dir) * Normal[idx].xyz;
99
+ force += f_wind;
100
+ }
101
+
84
102
// Apply simple Euler integrator
85
103
vec3 a = force * ParticleInvMass;
86
104
PositionOut[idx] = vec4 (
0 commit comments