From 0958f9a2706aa3658821fa8b54a785747e70b530 Mon Sep 17 00:00:00 2001
From: Tobias Frisch <tfrisch@uni-koblenz.de>
Date: Sat, 5 Feb 2022 20:33:31 +0100
Subject: [PATCH] Added gravity slider

Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de>
---
 projects/wobble_bobble/shaders/particle.inc     |  3 +++
 .../shaders/transform_particles_to_grid.comp    |  8 ++++++--
 projects/wobble_bobble/src/main.cpp             | 17 ++++++++++++-----
 3 files changed, 21 insertions(+), 7 deletions(-)

diff --git a/projects/wobble_bobble/shaders/particle.inc b/projects/wobble_bobble/shaders/particle.inc
index dbe0254e..ddb07e78 100644
--- a/projects/wobble_bobble/shaders/particle.inc
+++ b/projects/wobble_bobble/shaders/particle.inc
@@ -33,12 +33,15 @@ struct Simulation {
 	float size;
 	float lame1;
 	float lame2;
+	
 	int form;
 	int type;
 	float K;
 	float E;
+	
 	float gamma;
 	int mode;
+	float gravity;
 };
 
 const float PI = 3.1415926535897932384626433832795;
diff --git a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
index 236ff763..ade23ae7 100644
--- a/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
+++ b/projects/wobble_bobble/shaders/transform_particles_to_grid.comp
@@ -9,7 +9,11 @@ layout(set=0, binding=0, std430) readonly buffer particleBuffer {
     Particle particles [];
 };
 
-layout(set=0, binding=1, rgba32f) restrict writeonly uniform image3D gridImage;
+layout(set=0, binding=1) uniform simulationBlock {
+    Simulation simulation;
+};
+
+layout(set=0, binding=2, rgba32f) restrict writeonly uniform image3D gridImage;
 
 layout( push_constant ) uniform constants {
     float t;
@@ -73,7 +77,7 @@ void main()	{
         gridValue.xyz = vec3(0.0f);
     }
 
-    gridValue.xyz += vec3(0.0f, -9.81f * dts * gridValue.w, 0.0f);
+    gridValue.xyz += vec3(0.0f, -simulation.gravity * dts * gridValue.w, 0.0f);
 
     bvec3 lowerID = lessThanEqual(gl_GlobalInvocationID, ivec3(0));
     bvec3 negativeVelocity = lessThan(gridValue.xyz, vec3(0.0f));
diff --git a/projects/wobble_bobble/src/main.cpp b/projects/wobble_bobble/src/main.cpp
index d15d3a6a..de120874 100644
--- a/projects/wobble_bobble/src/main.cpp
+++ b/projects/wobble_bobble/src/main.cpp
@@ -33,12 +33,15 @@ struct Simulation {
 	float size;
 	float lame1;
 	float lame2;
+	
 	int form;
 	int type;
 	float K;
 	float E;
+	
 	float gamma;
 	int mode;
+	float gravity;
 };
 
 struct Physics {
@@ -348,6 +351,7 @@ int main(int argc, const char **argv) {
 	sim->E = 35.0f;
 	sim->gamma = 1.330f;
 	sim->mode = SIM_MODE_RANDOM;
+	sim->gravity = 9.81f;
 	
 	resetParticles(particles, initialVelocity, sim->density, sim->size, sim->form, sim->mode);
 	
@@ -378,7 +382,8 @@ int main(int argc, const char **argv) {
 	{
 		vkcv::DescriptorWrites writes;
 		writes.storageBufferWrites.push_back(vkcv::BufferDescriptorWrite(0, particles.getHandle()));
-		writes.storageImageWrites.push_back(vkcv::StorageImageDescriptorWrite(1, grid.getHandle()));
+		writes.uniformBufferWrites.push_back(vkcv::BufferDescriptorWrite(1, simulation.getHandle()));
+		writes.storageImageWrites.push_back(vkcv::StorageImageDescriptorWrite(2, grid.getHandle()));
 		core.writeDescriptorSet(transformParticlesToGridSets[0], writes);
 	}
 	
@@ -833,11 +838,11 @@ int main(int argc, const char **argv) {
 		ImGui::Spacing();
 		
 		ImGui::BeginGroup();
-		ImGui::SliderFloat("Bulk Modulus", &(sim->K), 0.0f, 100.0f);
-		ImGui::SliderFloat("Young's Modulus", &(sim->E), 0.0f, 100.0f);
+		ImGui::SliderFloat("Bulk Modulus", &(sim->K), 0.0f, 1000.0f);
+		ImGui::SliderFloat("Young's Modulus", &(sim->E), 0.0f, 1000.0f);
 		ImGui::SliderFloat("Heat Capacity Ratio", &(sim->gamma), 1.0f, 2.0f);
-		ImGui::SliderFloat("Lame1", &(sim->lame1), 0.0f, 100.0f);
-		ImGui::SliderFloat("Lame2", &(sim->lame2), 0.0f, 100.0f);
+		ImGui::SliderFloat("Lame1", &(sim->lame1), 0.0f, 1000.0f);
+		ImGui::SliderFloat("Lame2", &(sim->lame2), 0.0f, 1000.0f);
 		ImGui::EndGroup();
 
 		ImGui::Spacing();
@@ -853,6 +858,8 @@ int main(int argc, const char **argv) {
 			resetParticles(particles, initialVelocity, sim->density, sim->size, sim->form, sim->mode);
 		}
 		
+		ImGui::SliderFloat("Gravity", &(sim->gravity), 0.0f, 10.0f);
+		
 		ImGui::End();
 		gui.endGUI();
 		
-- 
GitLab