Fix bug in time handling in Particle Update shader
This commit is contained in:
parent
616be9e5fc
commit
7c469c9c3c
@ -29,7 +29,7 @@ uniform vec3 spawn_color;
|
|||||||
uniform float spawn_size;
|
uniform float spawn_size;
|
||||||
|
|
||||||
uniform float spawn_lifetime_min, spawn_lifetime_range; // Life of new particle - from min to (min+range)
|
uniform float spawn_lifetime_min, spawn_lifetime_range; // Life of new particle - from min to (min+range)
|
||||||
uniform float time_passed; // Time passed since last frame
|
uniform float delta; // Time passed since last frame
|
||||||
|
|
||||||
uniform vec3 random_seed; // Seed number for our random number function
|
uniform vec3 random_seed; // Seed number for our random number function
|
||||||
vec3 local_seed;
|
vec3 local_seed;
|
||||||
@ -55,11 +55,11 @@ void main() {
|
|||||||
position_out = position_pass[0];
|
position_out = position_pass[0];
|
||||||
velocity_out = velocity_pass[0];
|
velocity_out = velocity_pass[0];
|
||||||
|
|
||||||
if(type_pass[0] != 0.0) position_out += velocity_out * time_passed;
|
if(type_pass[0] != 0.0) position_out += velocity_out * delta;
|
||||||
if(type_pass[0] != 0.0) velocity_out += spawn_gravity * time_passed;
|
if(type_pass[0] != 0.0) velocity_out += spawn_gravity * delta;
|
||||||
|
|
||||||
color_out = color_pass[0];
|
color_out = color_pass[0];
|
||||||
lifetime_out = lifetime_pass[0] - time_passed;
|
lifetime_out = lifetime_pass[0] - delta;
|
||||||
size_out = size_pass[0];
|
size_out = size_pass[0];
|
||||||
type_out = type_pass[0];
|
type_out = type_pass[0];
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ ParticleSystem::ParticleSystem() {
|
|||||||
void ParticleSystem::update(float delta) {
|
void ParticleSystem::update(float delta) {
|
||||||
update_shader.use();
|
update_shader.use();
|
||||||
|
|
||||||
update_shader.setFloat("time_passed", elapsed_time);
|
update_shader.setFloat("delta", delta);
|
||||||
update_shader.setVec3("spawn_position", spawn_position);
|
update_shader.setVec3("spawn_position", spawn_position);
|
||||||
update_shader.setVec3("spawn_velocity_min", spawn_velocity_min);
|
update_shader.setVec3("spawn_velocity_min", spawn_velocity_min);
|
||||||
update_shader.setVec3("spawn_velocity_range", spawn_velocity_range);
|
update_shader.setVec3("spawn_velocity_range", spawn_velocity_range);
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#include "Gedeng/Input.h"
|
||||||
#include "Gedeng/Logger.h"
|
#include "Gedeng/Logger.h"
|
||||||
#include "Gedeng/ParticleSystem.h"
|
#include "Gedeng/ParticleSystem.h"
|
||||||
#include "Gedeng/QuadMesh.h"
|
#include "Gedeng/QuadMesh.h"
|
||||||
@ -11,8 +12,8 @@ class ParticleApp : public Gedeng::Application {
|
|||||||
public:
|
public:
|
||||||
ParticleApp(unsigned long ms_per_update, unsigned int window_size_x, unsigned int window_size_y,
|
ParticleApp(unsigned long ms_per_update, unsigned int window_size_x, unsigned int window_size_y,
|
||||||
Gedeng::String window_name)
|
Gedeng::String window_name)
|
||||||
: Application(ms_per_update, window_size_x, window_size_y, window_name), number_of_steps(10.0),
|
: Application(ms_per_update, window_size_x, window_size_y, window_name), particle_interval(0.1),
|
||||||
number_of_refinement_steps(10.0), bump_depth(0.1),
|
number_of_steps(10.0), number_of_refinement_steps(10.0), bump_depth(0.1),
|
||||||
render_shader(Gedeng::Shader("Shader/bump.vs", "Shader/bump.fs")),
|
render_shader(Gedeng::Shader("Shader/bump.vs", "Shader/bump.fs")),
|
||||||
camera(Gedeng::FPSCamera(90, 1920, 1080, 0.1, 1000.0)),
|
camera(Gedeng::FPSCamera(90, 1920, 1080, 0.1, 1000.0)),
|
||||||
albedo("Resources/Textures/PavingStones/PavingStones070_2K_Color.jpg", Gedeng::Texture::Settings()),
|
albedo("Resources/Textures/PavingStones/PavingStones070_2K_Color.jpg", Gedeng::Texture::Settings()),
|
||||||
@ -25,7 +26,7 @@ class ParticleApp : public Gedeng::Application {
|
|||||||
particles.set_color(glm::vec3(0.0f, 0.5f, 1.0f));
|
particles.set_color(glm::vec3(0.0f, 0.5f, 1.0f));
|
||||||
particles.set_lifetime(1.0f, 1.5f);
|
particles.set_lifetime(1.0f, 1.5f);
|
||||||
particles.set_size(0.1);
|
particles.set_size(0.1);
|
||||||
particles.set_interval(0.05f);
|
particles.set_interval(particle_interval);
|
||||||
particles.set_number_of_particles(1);
|
particles.set_number_of_particles(1);
|
||||||
particles.set_texture(&albedo);
|
particles.set_texture(&albedo);
|
||||||
|
|
||||||
@ -36,11 +37,15 @@ class ParticleApp : public Gedeng::Application {
|
|||||||
~ParticleApp() = default;
|
~ParticleApp() = default;
|
||||||
|
|
||||||
void fixed_update(double delta) override {
|
void fixed_update(double delta) override {
|
||||||
// camera.rotate(delta * 180, glm::vec3(0.0, 1.0, 0.0));
|
|
||||||
camera.update(delta);
|
camera.update(delta);
|
||||||
|
|
||||||
if (Gedeng::Input::is_mouse_down(GLFW_MOUSE_BUTTON_LEFT))
|
if (Gedeng::Input::is_mouse_down(GLFW_MOUSE_BUTTON_LEFT))
|
||||||
particles.set_position(camera.get_view_ray().get_plane_collision().collision_position);
|
particles.set_position(camera.get_view_ray().get_plane_collision().collision_position);
|
||||||
|
|
||||||
|
if (Gedeng::Input::is_key_down(GLFW_KEY_2)) particle_interval = fmax(particle_interval + 0.1 * delta, 0.02);
|
||||||
|
if (Gedeng::Input::is_key_down(GLFW_KEY_1)) particle_interval = fmax(particle_interval - 0.1 * delta, 0.02);
|
||||||
|
|
||||||
|
particles.set_interval(particle_interval);
|
||||||
}
|
}
|
||||||
|
|
||||||
void dynamic_update(double delta) override {
|
void dynamic_update(double delta) override {
|
||||||
@ -76,6 +81,8 @@ class ParticleApp : public Gedeng::Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
float particle_interval;
|
||||||
|
|
||||||
float number_of_steps;
|
float number_of_steps;
|
||||||
float number_of_refinement_steps;
|
float number_of_refinement_steps;
|
||||||
float bump_depth;
|
float bump_depth;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user