From 43cdbd374c79d3945f787c3fc93d29e3e60febdd Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Sun, 30 Jan 2022 01:48:40 +0100 Subject: [PATCH] Added pic method to update particle velocity Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- .../shaders/update_particle_velocities.comp | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/projects/wobble_bobble/shaders/update_particle_velocities.comp b/projects/wobble_bobble/shaders/update_particle_velocities.comp index ecd57e12..acf72765 100644 --- a/projects/wobble_bobble/shaders/update_particle_velocities.comp +++ b/projects/wobble_bobble/shaders/update_particle_velocities.comp @@ -17,19 +17,29 @@ void main() { memoryBarrierImage(); if (gl_GlobalInvocationID.x < particles.length()) { - vec3 position = particles[gl_GlobalInvocationID.x].minimal.position; - float mass = particles[gl_GlobalInvocationID.x].minimal.mass; + ParticleMinimal minimal = particles[gl_GlobalInvocationID.x].minimal; - vec3 offset = position; + ivec3 gridResolution = textureSize(sampler3D(gridImage, gridSampler), 0); + ivec3 gridWindow = ivec3(minimal.size * 2.0f * gridResolution); - vec4 gridSample = texture(sampler3D(gridImage, gridSampler), offset); + vec3 velocity_pic = vec3(0.0f); + uint i, j, k; - vec3 gridVelocity = gridSample.xyz; - float gridMass = gridSample.w; + for (i = -gridWindow.x; i <= gridWindow.x; i++) { + for (j = -gridWindow.y; j <= gridWindow.y; j++) { + for (k = -gridWindow.z; k <= gridWindow.z; k++) { + vec3 voxel = minimal.position + vec3(i, j, k) / gridResolution; - if (gridMass > 0.0f) { - particles[gl_GlobalInvocationID.x].minimal.velocity = gridVelocity * mass / gridMass; + if (distance(voxel, minimal.position) < minimal.size * 2.0f) { + vec4 gridSample = texture(sampler3D(gridImage, gridSampler), voxel); + + velocity_pic += voxel_particle_weight(voxel, minimal) * gridSample.xyz; + } + } + } } + + particles[gl_GlobalInvocationID.x].minimal.velocity = velocity_pic; } memoryBarrierBuffer(); -- GitLab