Skip to content
Snippets Groups Projects
Commit 3b34a718 authored by Sebastian Gaida's avatar Sebastian Gaida
Browse files

[#69] random paricles are fun

parent 88fbaef4
No related branches found
No related tags found
1 merge request!56Resolve "Partikelsystem"
Pipeline #25695 failed
......@@ -19,6 +19,14 @@ void Particle::setPosition( const glm::vec3 pos ){
m_position = pos;
}
const glm::vec3& Particle::getVelocity()const{
return m_velocity;
}
void Particle::setVelocity( const glm::vec3 vel ){
m_velocity = vel;
}
void Particle::update( const float delta ){
m_position += m_velocity * delta;
}
......
......@@ -11,6 +11,10 @@ public:
void setPosition( const glm::vec3 pos );
const glm::vec3& Particle::getVelocity()const;
void setVelocity( const glm::vec3 vel );
void update( const float delta );
const bool isAlive()const;
......
#include "ParticleSystem.hpp"
ParticleSystem::ParticleSystem(){
m_rdmVel = std::uniform_real_distribution<float> (-0.1f,0.1f);
}
const std::vector<Particle>& ParticleSystem::getParticles() const{
return m_particles;
}
......@@ -15,6 +19,7 @@ void ParticleSystem::updateParticles( const float deltaTime ){
for(Particle& particle :m_particles){
bool alive = particle.isAlive();
particle.setPosition( particle.getPosition() * static_cast<float>(alive) + static_cast<float>(!alive) * m_respawnPos );
particle.setVelocity( particle.getVelocity() * static_cast<float>(alive) + static_cast<float>(!alive) * glm::vec3(m_rdmVel(m_rdmEngine), m_rdmVel(m_rdmEngine),m_rdmVel(m_rdmEngine)));
particle.setLifeTime( (particle.getLifeTime() * alive + !alive * m_maxLifeTime ) - deltaTime );
particle.update(deltaTime);
}
......
......@@ -2,10 +2,12 @@
#include <vector>
#include "Particle.hpp"
#include <random>
class ParticleSystem {
public:
ParticleSystem();
const std::vector<Particle> &getParticles() const;
void addParticle( const Particle particle );
void addParticles( const std::vector<Particle> particles );
......@@ -17,4 +19,7 @@ private:
std::vector<Particle> m_particles;
glm::vec3 m_respawnPos = glm::vec3(0.f);
float m_maxLifeTime = 1.f;
std::uniform_real_distribution<float> m_rdmVel;
std::default_random_engine m_rdmEngine;
};
\ No newline at end of file
......@@ -4,6 +4,7 @@
#include <vkcv/camera/CameraManager.hpp>
#include <chrono>
#include "ParticleSystem.hpp"
#include <random>
int main(int argc, const char** argv) {
const char* applicationName = "Particlesystem";
......@@ -126,13 +127,18 @@ int main(int argc, const char** argv) {
pos = glm::vec2(static_cast<float>(offsetX), static_cast<float>(offsetY));
});
std::uniform_real_distribution<float> rdmVel(-0.1f,0.1f);
std::default_random_engine rdmEngine;
ParticleSystem particleSystem;
particleSystem.setMaxLifeTime(3.f);
glm::vec3 vel = glm::vec3(0.f , 0.1f, 0.0f);
glm::vec3 vel0 = glm::vec3(rdmVel(rdmEngine) , rdmVel(rdmEngine), 0.0f);
glm::vec3 vel1 = glm::vec3(rdmVel(rdmEngine) , rdmVel(rdmEngine), 0.0f);
glm::vec3 vel2 = glm::vec3(rdmVel(rdmEngine) , rdmVel(rdmEngine), 0.0f);
particleSystem.addParticles({
Particle(glm::vec3(0.f, 1.f, 0.f), vel, 1.f),
Particle(glm::vec3( 0.2f, 0.1f, 0.f), vel, 2.f),
Particle(glm::vec3(0.15f, 0.f, 0.1f), vel, 3.f)});
Particle(glm::vec3(0.f, 1.f, 0.f), vel0, 1.f),
Particle(glm::vec3( 0.2f, 0.1f, 0.f), vel1, 2.f),
Particle(glm::vec3(0.15f, 0.f, 0.1f), vel2, 3.f)});
std::vector<glm::mat4> modelMatrices;
std::vector<vkcv::DrawcallInfo> drawcalls;
......
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