public void setup() {
    _myArcball = new CCArcball(this);

    final List<CCForce> myForces = new ArrayList<CCForce>();
    myForces.add(_myViscousDrag = new CCViscousDrag(0.3f));
    myForces.add(_myForceField);
    myForces.add(_myTargetForce = new CCGPUMultiTargetForce(700, 700));
    myForces.add(_myGravity = new CCGravity(new CCVector3f()));

    _myParticles = new CCParticles(g, myForces, new ArrayList<CCGPUConstraint>(), 700, 700);
    _myEmitter = new CCGPUIndexParticleEmitter(_myParticles);
    _myQuad =
        new CCQuad3f(
            new CCVector3f(-250, -250, 0),
            new CCVector3f(250, -250, 0),
            new CCVector3f(250, 250, 0),
            new CCVector3f(-250, 250, 0));
    _myTargetSetup = new CCGPUTargetQuadSetup(_myQuad, CCGPUTargetQuadCreationMode.RANDOM);
    _myTargetForce.targetSetup(_myTargetSetup);

    for (int i = 0; i < 700 * 700; i++) {
      _myEmitter.emit(new CCVector3f(0, 0, 0), CCVecMath.random3f(10), 10, true);
    }

    addControls("app", "app", this);
    fixUpdateTime(1 / 30f);
    _myTileSaver = new CCTileSaver(g);
    addUpdateListener(_myTileSaver);
    addPostListener(_myTileSaver);
  }
 @Override
 public void keyPressed(final CCKeyEvent theEvent) {
   switch (theEvent.keyCode()) {
     case VK_S:
       _myTileSaver.init("export_tile3/" + frameCount + ".png", 5);
       g.pointSize(10);
       //			CCScreenCapture.capture("export/"+frameCount+".png", width, height);
       break;
     case VK_R:
       g.pointSize(1);
       //			_myBasicShader.reload();
       //			_myColorScaleShader.reload();
       break;
     case VK_D:
       g.pointSize(1);
       _myParticles.reset();
       for (int i = 0; i < 700 * 700; i++) {
         _myEmitter.emit(new CCVector3f(0, 0, 0), CCVecMath.random3f(10), 10, true);
       }
       break;
     default:
   }
 }