GPUParticles: Modulate direction length to avoid banding with lot of particles.

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@14873 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
vincentlj
2014-01-01 18:59:15 +00:00
parent 3abc10338e
commit 09926f6f4e

View File

@@ -271,17 +271,20 @@ void ParticleSystemProxy::generateParticlesFromPointEmitter(scene::IParticlePoin
particledir.rotateYZBy(os::Randomizer::frand() * emitter->getMaxAngleDegrees());
particledir.rotateXZBy(os::Randomizer::frand() * emitter->getMaxAngleDegrees());
particles[COMPONENTCOUNT * i + 4] = particledir.X;
particles[COMPONENTCOUNT * i + 5] = particledir.Y;
particles[COMPONENTCOUNT * i + 6] = particledir.Z;
initialvalue[COMPONENTCOUNT * i + 4] = particledir.X;
initialvalue[COMPONENTCOUNT * i + 5] = particledir.Y;
initialvalue[COMPONENTCOUNT * i + 6] = particledir.Z;
float size = rand();
size /= RAND_MAX;
size *= (sizeMax - sizeMin);
size += sizeMin;
initialvalue[COMPONENTCOUNT * i + 7] = size;
particles[COMPONENTCOUNT * i + 4] = particledir.X / size;
particles[COMPONENTCOUNT * i + 5] = particledir.Y / size;
particles[COMPONENTCOUNT * i + 6] = particledir.Z / size;
initialvalue[COMPONENTCOUNT * i + 4] = particledir.X / size;
initialvalue[COMPONENTCOUNT * i + 5] = particledir.Y / size;
initialvalue[COMPONENTCOUNT * i + 6] = particledir.Z / size;
initialvalue[COMPONENTCOUNT * i + 7] = rand();
initialvalue[COMPONENTCOUNT * i + 7] /= RAND_MAX;
initialvalue[COMPONENTCOUNT * i + 7] *= (sizeMax - sizeMin);
initialvalue[COMPONENTCOUNT * i + 7] += sizeMin;
}
glGenBuffers(1, &initial_values_buffer);
glBindBuffer(GL_ARRAY_BUFFER, initial_values_buffer);
@@ -325,17 +328,19 @@ void ParticleSystemProxy::generateParticlesFromBoxEmitter(scene::IParticleBoxEmi
particledir.rotateYZBy(os::Randomizer::frand() * emitter->getMaxAngleDegrees());
particledir.rotateXZBy(os::Randomizer::frand() * emitter->getMaxAngleDegrees());
particles[COMPONENTCOUNT * i + 4] = particledir.X;
particles[COMPONENTCOUNT * i + 5] = particledir.Y;
particles[COMPONENTCOUNT * i + 6] = particledir.Z;
initialvalue[COMPONENTCOUNT * i + 4] = particledir.X;
initialvalue[COMPONENTCOUNT * i + 5] = particledir.Y;
initialvalue[COMPONENTCOUNT * i + 6] = particledir.Z;
float size = rand();
size /= RAND_MAX;
size *= (sizeMax - sizeMin);
size += sizeMin;
initialvalue[COMPONENTCOUNT * i + 7] = rand();
initialvalue[COMPONENTCOUNT * i + 7] /= RAND_MAX;
initialvalue[COMPONENTCOUNT * i + 7] *= (sizeMax - sizeMin);
initialvalue[COMPONENTCOUNT * i + 7] += sizeMin;
initialvalue[COMPONENTCOUNT * i + 7] = size;
particles[COMPONENTCOUNT * i + 4] = particledir.X / size;
particles[COMPONENTCOUNT * i + 5] = particledir.Y / size;
particles[COMPONENTCOUNT * i + 6] = particledir.Z / size;
initialvalue[COMPONENTCOUNT * i + 4] = particledir.X / size;
initialvalue[COMPONENTCOUNT * i + 5] = particledir.Y / size;
initialvalue[COMPONENTCOUNT * i + 6] = particledir.Z / size;
}
glGenBuffers(1, &initial_values_buffer);
glBindBuffer(GL_ARRAY_BUFFER, initial_values_buffer);