diff --git a/projects/wobble_bobble/shaders/update_particle_deformation.comp b/projects/wobble_bobble/shaders/update_particle_deformation.comp index 9711d48ad5fc733c2a78a7cb4a7281d90e861fe8..8cd2aabe439764d4572502667d3f587d2f8726e5 100644 --- a/projects/wobble_bobble/shaders/update_particle_deformation.comp +++ b/projects/wobble_bobble/shaders/update_particle_deformation.comp @@ -25,7 +25,7 @@ void main() { mat3 velocity_gradient = mat3(0.0f); - uint i, j, k; + int i, j, k; for (i = -gridWindow.x; i <= gridWindow.x; i++) { for (j = -gridWindow.y; j <= gridWindow.y; j++) { diff --git a/projects/wobble_bobble/shaders/update_particle_velocities.comp b/projects/wobble_bobble/shaders/update_particle_velocities.comp index 123ac83a24e9e54d36518d98eac3ad62cf1f80dc..e1927eb8e9011357b075961199393ec74c8e9ba8 100644 --- a/projects/wobble_bobble/shaders/update_particle_velocities.comp +++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp @@ -1,5 +1,6 @@ #version 450 #extension GL_GOOGLE_include_directive : enable +#extension GL_EXT_control_flow_attributes : enable layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in; @@ -23,9 +24,10 @@ void main() { ivec3 gridResolution = textureSize(sampler3D(gridImage, gridSampler), 0); ivec3 gridWindow = ivec3(minimal.size * 2.0f * gridResolution); - vec3 velocity = vec3(minimal.velocity); + vec3 velocity_pic = vec3(0.0f); + vec3 velocity_flip = vec3(minimal.velocity); - uint i, j, k; + int i, j, k; for (i = -gridWindow.x; i <= gridWindow.x; i++) { for (j = -gridWindow.y; j <= gridWindow.y; j++) { @@ -38,14 +40,16 @@ void main() { vec4 gridOldSample = texture(sampler3D(gridOldImage, gridSampler), voxel); vec3 weight = voxel_particle_weight(voxel, minimal); + float w = (weight.x * weight.y * weight.z); - velocity += (weight.x * weight.y * weight.z) * (gridSample.xyz - gridOldSample.xyz); + velocity_pic += gridSample.xyz * w; + velocity_flip += (gridSample.xyz - gridOldSample.xyz) * w; } } } } - particles[gl_GlobalInvocationID.x].minimal.velocity = velocity; + particles[gl_GlobalInvocationID.x].minimal.velocity = mix(velocity_pic, velocity_flip, 0.95f); } memoryBarrierBuffer(); diff --git a/projects/wobble_bobble/src/main.cpp b/projects/wobble_bobble/src/main.cpp index 1049305cab2ad960cc70fb37e5cfbeb6bcb3a3e0..4e7635488a3c61d0f14e790a9b141fca0a578687 100644 --- a/projects/wobble_bobble/src/main.cpp +++ b/projects/wobble_bobble/src/main.cpp @@ -40,7 +40,7 @@ void distributeParticles(Particle *particles, size_t count, const glm::vec3& cen particles[i].position = center + offset; particles[i].size = size; - particles[i].velocity = glm::vec3(0.0f, 0.1f, 0.0f); + particles[i].velocity = glm::vec3(0.0f); volume += size; }