diff --git a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp index 8914381fdc37b1c49ec31b472d7aabe987452fd4..1bcea69def425ce20f282b038c5b941206c8f60d 100644 --- a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp +++ b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp @@ -73,7 +73,6 @@ void main() { gridValue.xyz += vec3(0.0f, -9.81f * dts * gridValue.w, 0.0f); - /* bvec3 lowerID = lessThanEqual(gl_GlobalInvocationID, ivec3(0)); bvec3 negativeVelocity = lessThan(gridValue.xyz, vec3(0.0f)); @@ -87,7 +86,6 @@ void main() { ); gridValue.xyz = mix(gridValue.xyz, -gridValue.xyz, collision); - */ barrier(); memoryBarrierShared(); diff --git a/projects/wobble_bobble/shaders/update_particle_velocities.comp b/projects/wobble_bobble/shaders/update_particle_velocities.comp index 75255bb0011e35b98097c818abe418be2f482880..2d773d85b7d4bd2e483b189dc2225cb42dc84e6f 100644 --- a/projects/wobble_bobble/shaders/update_particle_velocities.comp +++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp @@ -98,18 +98,38 @@ void main() { position = position + velocity_pic * dts; + const float gridRange = (1.0f - 2.0f * size); + for (uint i = 0; i < 3; i++) { if (position[i] - size < 0.0f) { - position[i] = -position[i] + 2.0f * size; + float a = (size - position[i]) / gridRange; + int b = int(floor(a)); + + a = (a - b) * gridRange; + + if (b % 2 == 0) { + position[i] = size + a; + } else { + position[i] = 1.0f - size - a; + } - if (velocity_pic[i] < 0.0f) { + if ((velocity_pic[i] < 0.0f) == (b % 2 == 0)) { velocity_pic[i] *= -1.0f; } } else if (position[i] + size > 1.0f) { - position[i] = 2.0f * (1.0f - size) - position[i]; + float a = (position[i] + size - 1.0f) / gridRange; + int b = int(floor(a)); + + a = (a - b) * gridRange; + + if (b % 2 == 0) { + position[i] = 1.0f - size - a; + } else { + position[i] = size + a; + } - if (velocity_pic[i] > 0.0f) { + if ((velocity_pic[i] > 0.0f) == (b % 2 == 0)) { velocity_pic[i] *= -1.0f; } }