0){
//Read Particle props
px = Particles[x,y,4];
py = Particles[x,y,5];
r = Particles[x,y,10];
a = Particles[x,y,13];
//get index of for SprecBandAray depending on radius
sbaIndex = (r+0.1)*1.2;
aaIndex = a*AudioArray.SizeDim1;
sbaIndex = floor(sbaIndex*SpecBandArray.SizeDim1);
sbaIndex = clamp(sbaIndex, 0, SpecBandArray.SizeDim1-1);
aaIndex = clamp(aaIndex ,0,AudioArray.SizeDim1-1);
//Derive spectral movement (current - previous)
diff = clamp(SpecBandArray[sbaIndex],0,1) - clamp(SpecBandArray_Prev[sbaIndex],0,1);
sval = AudioArray[aaIndex]*0.2;
//apply to velocity
if(diff > 0){
Particles[x,y,9] += diff*0.4;
}
Particles[x,y,7] += sval*px*0.5;
Particles[x,y,8] += sval*py*0.5;
//spring force
springForce = 0.8*(r+1);
Particles[x,y,7] -= (Particles[x,y,4] - Particles[x,y,11])*springForce;
Particles[x,y,8] -= (Particles[x,y,5] - Particles[x,y,12])*springForce;
Particles[x,y,9] -= Particles[x,y,6]*springForce;
//Damping
dampingFactor = 0.7;
Particles[x,y,7] *= dampingFactor;
Particles[x,y,8] *= dampingFactor;
Particles[x,y,9] *= dampingFactor;
//Update Position (integrate velocity)
Particles[x,y,4] += Particles[x,y,7];
Particles[x,y,5] += Particles[x,y,8];
Particles[x,y,6] += Particles[x,y,9];
}
}
}
//prepare next derivation cycle
for(float i=0; i
0){
b = (abs(Particles[x, y, 7]) + abs(Particles[x, y, 8]) + abs(Particles[x, y, 9]))*30 + 0.8;
glColor4f(Particles[x, y, 0]*b, Particles[x, y, 1]*b, Particles[x, y, 2]*b, Particles[x, y, 3]*b);
glVertex3f(Particles[x, y, 4], Particles[x, y, 5], Particles[x, y, 6]);
}
}
}
glEnd();]]>