GPUParticle: Fix sudden amount of particle for boxemitter
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@15015 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
parent
a32f760d03
commit
e4dd3c9ed6
@ -21,14 +21,23 @@ out float new_size;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 initialposition = sourcematrix * vec4(particle_position_initial, 1.0);
|
||||
vec4 adjusted_initial_velocity = sourcematrix * vec4(particle_position_initial + particle_velocity_initial, 1.0) - initialposition;
|
||||
float adjusted_lifetime = lifetime + (float(dt)/lifetime_initial);
|
||||
bool reset = (adjusted_lifetime > 1.) && (gl_VertexID <= level);
|
||||
reset = reset || (lifetime < 0.);
|
||||
new_particle_position = !reset ? particle_position + particle_velocity.xyz * float(dt) : initialposition.xyz;
|
||||
new_lifetime = !reset ? adjusted_lifetime : 0.;
|
||||
new_particle_velocity = !reset ? particle_velocity : adjusted_initial_velocity.xyz;
|
||||
new_size = !reset ? mix(size_initial, size_initial * size_increase_factor, adjusted_lifetime) : size_initial;
|
||||
float updated_lifetime = lifetime + (float(dt)/lifetime_initial);
|
||||
if ((updated_lifetime > 1.) && (gl_VertexID <= level))
|
||||
{
|
||||
float dt_from_last_frame = fract(updated_lifetime) * lifetime_initial;
|
||||
vec4 updated_initialposition = sourcematrix * vec4(particle_position_initial, 1.0);
|
||||
vec4 updated_initial_velocity = sourcematrix * vec4(particle_position_initial + particle_velocity_initial, 1.0) - updated_initialposition;
|
||||
new_particle_position = updated_initialposition.xyz + updated_initial_velocity.xyz * float(dt_from_last_frame);
|
||||
new_particle_velocity = updated_initial_velocity.xyz;
|
||||
new_lifetime = fract(updated_lifetime);
|
||||
new_size = mix(size_initial, size_initial * size_increase_factor, fract(updated_lifetime));
|
||||
}
|
||||
else
|
||||
{
|
||||
new_particle_position = particle_position + particle_velocity.xyz * float(dt);
|
||||
new_particle_velocity = particle_velocity;
|
||||
new_lifetime = updated_lifetime;
|
||||
new_size = mix(size_initial, size_initial * size_increase_factor, updated_lifetime);
|
||||
}
|
||||
gl_Position = vec4(0.);
|
||||
}
|
||||
|
@ -391,8 +391,8 @@ void ParticleSystemProxy::generateParticlesFromSphereEmitter(scene::IParticleSph
|
||||
particles[i].PositionX = pos.X;
|
||||
particles[i].PositionY = pos.Y;
|
||||
particles[i].PositionZ = pos.Z;
|
||||
// Initial lifetime is < 0
|
||||
particles[i].Lifetime = -1.;
|
||||
// Initial lifetime is > 1
|
||||
particles[i].Lifetime = 2.;
|
||||
|
||||
memcpy(&(initialvalue[i].PositionX), &(particles[i].PositionX), 3 * sizeof(float));
|
||||
generateLifetimeSizeDirection(emitter, initialvalue[i].Lifetime, initialvalue[i].Size,
|
||||
|
Loading…
x
Reference in New Issue
Block a user