Skip to content
Snippets Groups Projects
Verified Commit 65d3b726 authored by Josch Morgenstern's avatar Josch Morgenstern
Browse files

[#111] add dynamic gravity vector

parent 3119489a
No related branches found
No related tags found
1 merge request!95Resolve "Wassersimulation mit Interaktion"
...@@ -4,8 +4,6 @@ ...@@ -4,8 +4,6 @@
const float PI = 3.1415926535897932384626433832795; const float PI = 3.1415926535897932384626433832795;
#include "particle_params.inc"
layout(local_size_x = 256) in; layout(local_size_x = 256) in;
struct Particle struct Particle
...@@ -30,7 +28,15 @@ layout(std430, binding = 0) writeonly buffer buffer_outParticle ...@@ -30,7 +28,15 @@ layout(std430, binding = 0) writeonly buffer buffer_outParticle
}; };
layout( push_constant ) uniform constants{ layout( push_constant ) uniform constants{
float deltaTime; float h;
float mass;
float gasConstant;
float offset;
float gravity;
float viscosity;
float ABSORBTION;
float dt;
vec3 gravityDir;
float particleCount; float particleCount;
}; };
...@@ -56,6 +62,7 @@ vec3 viscosityForce = vec3(0, 0, 0); ...@@ -56,6 +62,7 @@ vec3 viscosityForce = vec3(0, 0, 0);
vec3 externalForce = vec3(0, 0, 0); vec3 externalForce = vec3(0, 0, 0);
void main() { void main() {
uint id = gl_GlobalInvocationID.x; uint id = gl_GlobalInvocationID.x;
if(id >= int(particleCount)) if(id >= int(particleCount))
...@@ -63,7 +70,7 @@ void main() { ...@@ -63,7 +70,7 @@ void main() {
return; return;
} }
externalForce = vec3(0, inParticle[id].density * gravity, 0); externalForce = inParticle[id].density * gravity * vec3(-gravityDir.x,gravityDir.y,gravityDir.z);
for(uint i = 0; i < int(particleCount); i++) for(uint i = 0; i < int(particleCount); i++)
{ {
...@@ -73,8 +80,8 @@ void main() { ...@@ -73,8 +80,8 @@ void main() {
float dist = length(dir); float dist = length(dir);
if(dist != 0) if(dist != 0)
{ {
pressureForce += mass * -(inParticle[id].pressure + inParticle[i].pressure)/(2.f * inParticle[i].density) * grad_spiky(dist) * normalize(dir); pressureForce += mass * -(inParticle[id].pressure + inParticle[i].pressure)/(2.f * inParticle[i].density) * grad_spiky(dist) * normalize(dir);
viscosityForce += mass * (inParticle[i].velocity - inParticle[id].velocity)/inParticle[i].density * laplacian(dist); viscosityForce += mass * (inParticle[i].velocity - inParticle[id].velocity)/inParticle[i].density * laplacian(dist);
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment