History

Rave tweak: noise reduction …by putting a smart cap on particle chain distances

Eric Johnston committed 13 years ago

Commit 97d1c5b1 parent 7a24a562 files · +13 −4Browse files

Showing the changes to interface/src/ParticleSystem.cpp (1 of 2 files). Show all

Unified · Split

interface/src/ParticleSystem.cpp+12−4
@@ -17,6 +17,7 @@ const float DEFAULT_PARTICLE_AIR_FRICTION = 2.0f; · 16 unmodified lines
1717 const float DEFAULT_PARTICLE_LIFESPAN = 1.0f;
1818 const int DEFAULT_PARTICLE_SPHERE_RESOLUTION = 6;
1919 const float DEFAULT_EMITTER_RENDER_LENGTH = 0.2f;
20+const float DEFAULT_PARTICLE_CONNECT_DISTANCE = 0.03f;
2021
2122 ParticleSystem::ParticleSystem() {
2223
@@ -41,7 +42,8 @@ ParticleSystem::ParticleSystem() { · 18 unmodified lines
4142 e->currentParticle = 0;
4243 e->particleRenderStyle = PARTICLE_RENDER_STYLE_SPHERE;
4344 e->numParticlesEmittedThisTime = 0;
44−
45+ e->maxParticleConnectDistance = DEFAULT_PARTICLE_CONNECT_DISTANCE;
46+
4547 for (int lifeStage = 0; lifeStage < NUM_PARTICLE_LIFE_STAGES; lifeStage++) {
4648 setParticleAttributesToDefault(&_emitter[emitterIndex].particleAttributes[lifeStage]);
4749 }
@@ -110,6 +112,7 @@ void ParticleSystem::updateEmitter(int emitterIndex, float deltaTime) { · 62 unmodified lines
110112
111113 void ParticleSystem::createParticle(int e, float timeFraction) {
112114
115+ float maxConnectDistSqr = _emitter[e].maxParticleConnectDistance * _emitter[e].maxParticleConnectDistance;
113116 for (unsigned int p = 0; p < MAX_PARTICLES; p++) {
114117 if (!_particle[p].alive) {
115118
@@ -122,9 +125,14 @@ void ParticleSystem::createParticle(int e, float timeFraction) { · 6 unmodified lines
122125 _particle[p].color = _emitter[e].particleAttributes[PARTICLE_LIFESTAGE_0].color;
123126 _particle[p].previousParticle = NULL_PARTICLE;
124127
125− if (_particle[_emitter[e].currentParticle].alive) {
126− if (_particle[_emitter[e].currentParticle].emitterIndex == e) {
127− _particle[p].previousParticle = _emitter[e].currentParticle;
128+ Particle& prev = _particle[_emitter[e].currentParticle];
129+ if (prev.alive) {
130+ if (prev.emitterIndex == e) {
131+ glm::vec3 diff = prev.position - _particle[p].position;
132+ float sqrDist = glm::dot(diff, diff);
133+ if (sqrDist < maxConnectDistSqr) {
134+ _particle[p].previousParticle = _emitter[e].currentParticle;
135+ }
128136 }
129137 }
130138