public void reset(int index) { if (systems == null) { systems = new ParticleSystem[maxStep]; steps = new int[maxStep]; addVelocities = new Vector3[maxStep][particleSize]; } if (systems[index] == null) { // initialize Geometry geometry = THREE.Geometry(); for (int i = 0; i < particleSize; i++) { geometry.vertices().push(THREE.Vector3(0, 0, 0)); } ParticleSystem system = THREE.ParticleSystem(geometry, baseMaterial.build()); // system.setSortParticles(true); systems[index] = system; parent.add(system); } else { // ParticleSystem system = systems[index]; ((ParticleBasicMaterial) system.getMaterial()).setSize(baseSize); for (int i = 0; i < particleSize; i++) { Vector3 vertex = system.getGeometry().vertices().get(i); vertex.set(0, 0, 0); } system.getGeometry().setVerticesNeedUpdate(true); } // addVelocities=new Vector3[maxStep][particleSize]; // simple and boring for (int i = 0; i < particleSize; i++) { addVelocities[index][i] = THREE.Vector3( plusMinus(velocityRange.getX()), plusMinus(velocityRange.getY()), plusMinus(velocityRange.getZ())); } Vector3 addwind = THREE.Vector3( plusMinus(velocityRange.getX()) * 2, plusMinus(velocityRange.getY()) * 2, plusMinus(velocityRange.getZ()) * 2); // wind.addSelf(addwind); if (index % 5 == 0) { wind.set( wind.getX() / 4 * 3 + addwind.getX() / 4, wind.getY() / 4 * 3 + addwind.getY() / 4, wind.getZ() / 4 * 3 + addwind.getZ() / 4); } for (int i = 0; i < particleSize; i++) { winds[i] = THREE.Vector3( plusMinus(velocityRange.getX()) * 5, plusMinus(velocityRange.getY()) * 5, plusMinus(velocityRange.getZ()) * 5); } }