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

[#69] change particleSystem for minimal input

parent e5f4800f
No related branches found
No related tags found
1 merge request!56Resolve "Partikelsystem"
Pipeline #25718 passed
#include "ParticleSystem.hpp"
ParticleSystem::ParticleSystem(){
m_rdmVel = std::uniform_real_distribution<float> (-0.1f,0.1f);
ParticleSystem::ParticleSystem(uint32_t particleCount ,glm::vec3 minVelocity , glm::vec3 maxVelocity , glm::vec2 lifeTime )
{
m_rdmVel.resize(3);
m_rdmVel[0] = std::uniform_real_distribution<float>(minVelocity.x, maxVelocity.x);
m_rdmVel[1] = std::uniform_real_distribution<float>(minVelocity.y, maxVelocity.y);
m_rdmVel[2] = std::uniform_real_distribution<float>(minVelocity.z, maxVelocity.z);
m_rdmLifeTime = std::uniform_real_distribution<float>(lifeTime.x, lifeTime.y);
for(uint32_t i = 0; i < particleCount ;i++ ){
addParticle(Particle(m_respawnPos, getRandomVelocity(), getRandomLifeTime()));
}
}
const std::vector<Particle>& ParticleSystem::getParticles() const{
......@@ -19,15 +28,29 @@ 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),0.0f));
particle.setLifeTime( (particle.getLifeTime() * alive + !alive * m_maxLifeTime ) - deltaTime );
particle.setVelocity( particle.getVelocity() * static_cast<float>(alive) + static_cast<float>(!alive) * getRandomVelocity());
particle.setLifeTime( (particle.getLifeTime() * alive + !alive * getRandomLifeTime() ) - deltaTime );
particle.update(deltaTime);
}
}
glm::vec3 ParticleSystem::getRandomVelocity(){
return glm::vec3(m_rdmVel[0](m_rdmEngine), m_rdmVel[1](m_rdmEngine),m_rdmVel[2](m_rdmEngine));
}
float ParticleSystem::getRandomLifeTime(){
return m_rdmLifeTime(m_rdmEngine);
}
void ParticleSystem::setRespawnPos( const glm::vec3 respawnPos){
m_respawnPos = respawnPos;
}
void ParticleSystem::setMaxLifeTime( const float respawnTime ){
m_maxLifeTime = respawnTime;
void ParticleSystem::setRdmLifeTime( const glm::vec2 lifeTime ){
m_rdmLifeTime = std::uniform_real_distribution<float> (lifeTime.x,lifeTime.y);
}
void ParticleSystem::setRdmVelocity( glm::vec3 minVelocity, glm::vec3 maxVelocity ){
m_rdmVel[0] = std::uniform_real_distribution<float> (minVelocity.x,maxVelocity.x);
m_rdmVel[1] = std::uniform_real_distribution<float> (minVelocity.y,maxVelocity.y);
m_rdmVel[2] = std::uniform_real_distribution<float> (minVelocity.z,maxVelocity.z);
}
......@@ -7,19 +7,23 @@
class ParticleSystem {
public:
ParticleSystem();
ParticleSystem(uint32_t particleCount , glm::vec3 minVelocity = glm::vec3(0.f,0.f,0.f), glm::vec3 maxVelocity = glm::vec3(1.f,1.f,0.f), glm::vec2 lifeTime = glm::vec2(2.f,3.f));
const std::vector<Particle> &getParticles() const;
void addParticle( const Particle particle );
void addParticles( const std::vector<Particle> particles );
void updateParticles( const float deltaTime );
void setRespawnPos( const glm::vec3 respawnPos );
void setMaxLifeTime( const float respawnTime );
void setRdmLifeTime( const glm::vec2 lifeTime );
void setRdmVelocity( glm::vec3 minVelocity, glm::vec3 maxVelocity );
private:
void addParticle( const Particle particle );
void addParticles( const std::vector<Particle> particles );
glm::vec3 getRandomVelocity();
float getRandomLifeTime();
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::vector<std::uniform_real_distribution<float>> m_rdmVel;
std::uniform_real_distribution<float> m_rdmLifeTime;
std::default_random_engine m_rdmEngine;
};
\ No newline at end of file
......@@ -126,21 +126,10 @@ 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 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.0f), vel0, 1.f),
Particle(glm::vec3( 0.2f, 0.1f, 0.0f), vel1, 1.5f),
Particle(glm::vec3(0.15f, 0.f, 0.0f), vel2, 2.f),
Particle(glm::vec3(-0.15f, 0.1f, 0.0f), vel2, 2.5f),
Particle(glm::vec3(0.25f, 0.f, 0.0f), vel2, 3.f),
Particle(glm::vec3(-0.15f, 0.2f, 0.0f), vel2, 3.5f)});
glm::vec3 minVelocity = glm::vec3(-0.5f,-0.5f,0.f);
glm::vec3 maxVelocity = glm::vec3(0.5f,0.5f,0.f);
glm::vec2 lifeTime = glm::vec2(0.f,5.f);
ParticleSystem particleSystem = ParticleSystem( 100 , minVelocity, maxVelocity, lifeTime);
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