コード例 #1
0
 @Override
 public void write(JMEExporter ex) throws IOException {
   super.write(ex);
   OutputCapsule oc = ex.getCapsule(this);
   // Save all texture locations.
   TextureState state = (TextureState) this.getRenderState(StateType.Texture);
   Texture colorMap = state.getTexture(0);
   Texture normalMap = state.getTexture(1);
   Texture specularMap = state.getTexture(2);
   if (colorMap != null) {
     String colorRaw = colorMap.getImageLocation();
     oc.write(colorRaw.substring(colorRaw.indexOf("/"), colorRaw.length()), "ColorMap", null);
   }
   if (normalMap != null) {
     String normalRaw = normalMap.getImageLocation();
     oc.write(normalRaw.substring(normalRaw.indexOf("/"), normalRaw.length()), "NormalMap", null);
   }
   if (specularMap != null) {
     String specularRaw = specularMap.getImageLocation();
     oc.write(
         specularRaw.substring(specularRaw.indexOf("/"), specularRaw.length()),
         "SpecularMap",
         null);
   }
   // Write out primitives.
   oc.write(this.vertices, "Vertices", null);
   oc.write(this.triangles, "Triangles", null);
   oc.write(this.weights, "Weights", null);
   // Write out settings.
   oc.write(this.anisotropic, "Anisotropic", 0);
   oc.write(this.miniFilter.name(), "MinFilter", null);
   oc.write(this.magFilter.name(), "MagFilter", null);
   oc.write(this.orientedBounding, "OrientedBounding", false);
 }
コード例 #2
0
ファイル: TrailManager.java プロジェクト: toloober/jme-demos
  private TrailManager(final Node root) {
    this.root = root;

    trails = new HashMap<Spatial, TrailMesh>();

    Renderer r = DisplaySystem.getDisplaySystem().getRenderer();
    ts = r.createTextureState();
    ts.setEnabled(true);
    Texture t1 =
        TextureManager.loadTexture(
            ResourceLocatorTool.locateResource(ResourceLocatorTool.TYPE_TEXTURE, "trail_y1.png"),
            Texture.MinificationFilter.Trilinear,
            Texture.MagnificationFilter.Bilinear);
    ts.setTexture(t1);

    bs = r.createBlendState();
    bs.setBlendEnabled(true);
    bs.setSourceFunction(BlendState.SourceFunction.SourceAlpha);
    bs.setDestinationFunction(BlendState.DestinationFunction.One);
    bs.setTestEnabled(true);

    zs = r.createZBufferState();
    zs.setWritable(false);

    cs = r.createCullState();
    cs.setCullFace(CullState.Face.None);
    cs.setEnabled(true);
  }
コード例 #3
0
  /** Process and setup the <code>TextureState</code> and texture UV buffer. */
  private void processTexture() {
    FloatBuffer textureBuffer = BufferUtils.createVector2Buffer(this.vertices.length);
    float maxU = 1;
    float maxV = 1;
    float minU = 0;
    float minV = 0;
    int index = 0;
    for (IVertex vertex : this.vertices) {
      BufferUtils.setInBuffer(vertex.getTextureCoords(), textureBuffer, index);
      if (vertex.getTextureCoords().x > maxU) maxU = vertex.getTextureCoords().x;
      else if (vertex.getTextureCoords().x < minU) minU = vertex.getTextureCoords().x;
      if (vertex.getTextureCoords().y > maxV) maxV = vertex.getTextureCoords().y;
      else if (vertex.getTextureCoords().y < minV) minV = vertex.getTextureCoords().y;
      index++;
    }
    this.setTextureCoords(new TexCoords(textureBuffer));

    // Get texture state.
    TextureState state = (TextureState) this.getRenderState(StateType.Texture);
    if (state == null) {
      state = DisplaySystem.getDisplaySystem().getRenderer().createTextureState();
      this.setRenderState(state);
    }
    // Set color map.
    if (this.color != null) state.setTexture(this.loadTexture(this.color, maxU, maxV), 0);
    // Set normal map.
    if (this.normal != null) state.setTexture(this.loadTexture(this.normal, maxU, maxV), 1);
    // Set specular map.
    if (this.specular != null) state.setTexture(this.loadTexture(this.specular, maxU, maxV), 2);
  }
 public TextureAnimationController(TextureState ts) {
   textures = new Texture[ts.getNumberOfSetTextures()];
   for (int i = 0, count = 0; i < TextureState.getNumberOfTotalUnits(); i++) {
     Texture t = ts.getTexture(i);
     if (t != null) {
       textures[count++] = t;
     }
   }
   initializeValues();
 }
コード例 #5
0
ファイル: Enemy.java プロジェクト: edewit/1942-remake
  public Enemy(String id, Renderer renderer) {
    super(id, null);

    URL model = getClass().getClassLoader().getResource("fokker.jme");
    Spatial ship = null;
    try {
      ship = (Spatial) BinaryImporter.getInstance().load(model.openStream());
    } catch (IOException e) {
      e.printStackTrace();
    }

    ship.setLocalScale(.2f);
    TextureState ts = renderer.createTextureState();
    ts.setEnabled(true);
    ts.setTexture(
        TextureManager.loadTexture(
            getClass().getClassLoader().getResource("fokker.jpg"),
            Texture.MinificationFilter.Trilinear,
            Texture.MagnificationFilter.Bilinear));
    ship.setRenderState(ts);
    ship.setNormalsMode(NormalsMode.AlwaysNormalize);
    ship.setModelBound(new BoundingBox());
    ship.updateModelBound();

    //        ship.setLocalRotation(new Quaternion().fromAngleAxis(FastMath.PI, Vector3f.UNIT_Z));
    setModel(ship);

    Vector3f[] points = new Vector3f[6];
    points[0] = new Vector3f(110, 0, 110);
    points[1] = new Vector3f(110, 0, 50);
    points[2] = new Vector3f(-20, 0, 10);
    points[3] = new Vector3f(20, 0, -20);
    points[4] = new Vector3f(-90, 0, -90);
    points[5] = new Vector3f(0, 0, 110);
    endPoint = points[5];

    CatmullRomCurve curve = new CatmullRomCurve("Curve", points);
    curve.setSteps(512);
    //        ship.setLocalTranslation(points[0]);
    //        curve.setCullHint(CullHint.Always);

    CurveController curveController = new CurveController(curve, ship);
    ship.addController(curveController);
    curveController.setRepeatType(Controller.RT_CLAMP);
    curveController.setSpeed(0.05f);
    curveController.setAutoRotation(true);
    curveController.setUpVector(new Vector3f(0, 0.5f, 0));

    attachChild(curve);

    ExplosionFactory.warmup();
  }
コード例 #6
0
  /**
   * builds the trimesh.
   *
   * @see com.jme.app.SimpleGame#initGame()
   */
  protected void simpleInitGame() {
    display.setTitle("Cylinder Test");

    t = new Tube("Tube", 18, 12, 30);
    t.getLocalTranslation().z = -30;
    t.setModelBound(new BoundingSphere());
    t.updateModelBound();
    rootNode.attachChild(t);

    TextureState ts = display.getRenderer().createTextureState();
    ts.setEnabled(true);
    ts.setTexture(
        TextureManager.loadTexture(
            TestTube.class.getClassLoader().getResource("jmetest/data/images/Monkey.jpg"),
            MinificationFilter.Trilinear,
            MagnificationFilter.Bilinear));
    ts.getTexture().setWrap(WrapMode.Repeat);
    rootNode.setRenderState(ts);
  }
コード例 #7
0
ファイル: MainGameState.java プロジェクト: toloober/jme-demos
  /** creates the floor and two walls standing on the floor. */
  private void createFloor(float width, float length) {
    Texture tex =
        TextureManager.loadTexture(
            ResourceLocatorTool.locateResource(ResourceLocatorTool.TYPE_TEXTURE, "floor.png"),
            false);
    tex.setScale(new Vector3f(10, 10, 10));
    tex.setWrap(WrapMode.Repeat);
    TextureState tsCarpet = DisplaySystem.getDisplaySystem().getRenderer().createTextureState();
    tsCarpet.setTexture(tex);

    StaticPhysicsNode floor = makeWall("floor", width, 0.5f, length, new Vector3f(0, -1, 0), null);
    floor.setRenderState(tsCarpet);
    rootNode.attachChild(floor);

    rootNode.attachChild(
        makeWall(
            "back wall", width / 2, 5, 1, new Vector3f(0, 5, -width / 2), MaterialType.GRANITE));
    rootNode.attachChild(
        makeWall(
            "left wall", 1, 5, width / 2, new Vector3f(-width / 2, 5, 0), MaterialType.GRANITE));
  }
コード例 #8
0
  public void frameUpdate(float timePerFrame) {
    // TODO Auto-generated method stub
    // TODO Play Frame, when in the right time => Sync-Playback-rate
    /*
     *
    // Put A Frame according to its Framerate
     * TODO: Declare    private long controller;
      						private long frameWait;
      						private long starttime;
      						private int iteration;

      			 Initialize starttime = System.currentTimeMillis();
    					controller = System.currentTimeMillis();
    					frameWait = 1000 / perf.getFramerate();
    					iteration = 0;

    This one into the update function:

    if (System.currentTimeMillis() >= (controller + frameWait)){
    		controller = System.currentTimeMillis();
    		System.out.println("There you go: " + System.currentTimeMillis());
    		drawFrame();
    		iteration++;
    }

    if (System.currentTimeMillis() > (starttime + (iteration*frameWait)+frameWait)) {
    	// skip Frame

    	iteration += 2;
    	System.out.println("Look ma, no hands: " + iteration);
    }
     */
    // timer.getTimePerFrame();

    if (oggDecoder.isReady()) {
      oggDecoder.readBody();
      TextureManager.releaseTexture(texture.getTextureKey());

      texture =
          TextureManager.loadTexture(
              Toolkit.getDefaultToolkit().createImage(oggDecoder.getYUVBuffer()),
              MinificationFilter.BilinearNearestMipMap,
              MagnificationFilter.Bilinear,
              true);
      if (texture != null) {
        if (textureState != null)
          textureState = DisplaySystem.getDisplaySystem().getRenderer().createTextureState();
        textureState.setTexture(texture);
        quad.setRenderState(textureState);
        quad.updateRenderState();
      }
    }
  }
コード例 #9
0
ファイル: TestOctahedron.java プロジェクト: jmecn/learnJME3
  /**
   * builds the trimesh.
   *
   * @see com.jme.app.SimpleGame#initGame()
   */
  protected void simpleInitGame() {
    display.setTitle("Octahedron Test");
    cam.setLocation(new Vector3f(0, 0, 100));
    cam.update();

    s = new Octahedron("Octahedron", 20);
    s.setModelBound(new BoundingBox());
    s.updateModelBound();

    rootNode.attachChild(s);

    TextureState ts = display.getRenderer().createTextureState();
    ts.setEnabled(true);
    ts.setTexture(
        TextureManager.loadTexture(
            TestBoxColor.class.getClassLoader().getResource("jmetest/data/images/Monkey.jpg"),
            Texture.MinificationFilter.BilinearNearestMipMap,
            Texture.MagnificationFilter.Bilinear));

    // rootNode.setRenderState(ts);

  }
コード例 #10
0
 private void createSky() {
   detachChildNamed("Skydome");
   float skyRadius = visibilityRadius * 1.1f;
   skydome = new Dome("Skydome", 5, 24, skyRadius);
   skyHeightOffset = skyRadius / 2;
   skydome.setModelBound(new BoundingSphere());
   skydome.updateModelBound();
   LightState lightState = display.getRenderer().createLightState();
   lightState.setEnabled(true);
   // lightState.setTwoSidedLighting(true);
   lightState.setGlobalAmbient(ColorRGBA.white);
   skydome.setRenderState(lightState);
   skydome.setLightCombineMode(LightState.REPLACE);
   Texture domeTexture =
       TextureManager.loadTexture(
           "../MBWSClient/data/images/wolken.jpg", Texture.MM_LINEAR, Texture.FM_LINEAR);
   TextureState ts = display.getRenderer().createTextureState();
   ts.setTexture(domeTexture);
   skydome.setRenderState(ts);
   // skydome.setTextureCombineMode(TextureState.REPLACE);
   attachChild(skydome);
   updateRenderState();
 }
コード例 #11
0
  private void createShape() {
    quad = new Quad("texturedQuad", Scale.fromMeter(25), Scale.fromMeter(25));
    // quad = new Box("", new Vector3f(), Scale.fromMeter(25), Scale.fromMeter(25),
    // Scale.fromMeter(25));

    // quad.setLocalTranslation(new Vector3f(0,0,-400));

    texture =
        TextureManager.loadTexture(
            "data/foliage/A_Bush_1.png",
            MinificationFilter.BilinearNearestMipMap,
            MagnificationFilter.Bilinear);

    if (texture != null) {
      textureState = DisplaySystem.getDisplaySystem().getRenderer().createTextureState();
      textureState.setTexture(texture);
      quad.setRenderState(textureState);
    }

    // rootNode.attachChild(quad);
  }
コード例 #12
0
  /**
   * Walks through the scenegraph beneath the supplied {@link Spatial} and indicates to any attached
   * textures that the data should be stored internally rather than in the file. Original image file
   * locations are saved and returned.
   *
   * @param s The object to perform this action on
   * @param textureFiles - used for recursion; pass in null
   * @return The locations of all located textures
   */
  public static List<URL> setupTextureStorage(Spatial s, List<URL> textureFiles) {
    if (textureFiles == null) {
      textureFiles = new ArrayList<URL>();
    }

    if (s instanceof Node) {
      // a Node shouldn't have a texture state attached to it, but in case it does:
      if (s.getRenderState(StateType.Texture) != null) {
        TextureState ts = (TextureState) s.getRenderState(StateType.Texture);
        for (int i = 0; i < ts.getNumberOfSetTextures(); i++) {
          Texture tex = ts.getTexture(i);
          if (tex != null) {
            try {
              textureFiles.add(new URL(tex.getImageLocation()));
            } catch (MalformedURLException e) {
              e.printStackTrace();
            }
            tex.setStoreTexture(true);
          }
        }
      }

      if (((Node) s).getChildren() != null) {
        Iterator<Spatial> it = ((Node) s).getChildren().iterator();
        while (it.hasNext()) {
          setupTextureStorage(it.next(), textureFiles);
        }
      }
    } else {
      if (s.getRenderState(StateType.Texture) != null) {
        TextureState ts = (TextureState) s.getRenderState(StateType.Texture);
        for (int i = 0; i < ts.getNumberOfSetTextures(); i++) {
          Texture tex = ts.getTexture(i);
          if (tex != null) {
            try {
              textureFiles.add(new URL(tex.getImageLocation()));
            } catch (MalformedURLException e) {
              e.printStackTrace();
            }
            tex.setStoreTexture(true);
          }
        }
      }
    }

    return textureFiles;
  }
コード例 #13
0
  public static void warmup() {
    DisplaySystem display = DisplaySystem.getDisplaySystem();
    bs = display.getRenderer().createBlendState();
    bs.setBlendEnabled(true);
    bs.setSourceFunction(SourceFunction.SourceAlpha);
    bs.setDestinationFunction(DestinationFunction.One);
    bs.setTestEnabled(true);
    bs.setTestFunction(TestFunction.GreaterThan);

    ts = display.getRenderer().createTextureState();
    ts.setTexture(
        TextureManager.loadTexture(
            ExplosionFactory.class
                .getClassLoader()
                .getResource("jmetest/data/texture/flaresmall.jpg")));

    zstate = display.getRenderer().createZBufferState();
    zstate.setEnabled(false);

    for (int i = 0; i < 3; i++) createExplosion();
    for (int i = 0; i < 5; i++) createSmallExplosion();
  }
コード例 #14
0
  private Node createObjects() {
    Node objects = new Node("objects");

    Torus torus = new Torus("Torus", 50, 50, 10, 20);
    torus.setLocalTranslation(new Vector3f(50, -5, 20));
    TextureState ts = display.getRenderer().createTextureState();
    Texture t0 =
        TextureManager.loadTexture(
            TestSketch.class.getClassLoader().getResource("jmetest/data/images/Monkey.jpg"),
            Texture.MM_LINEAR_LINEAR,
            Texture.FM_LINEAR);
    Texture t1 =
        TextureManager.loadTexture(
            TestSketch.class.getClassLoader().getResource("jmetest/data/texture/north.jpg"),
            Texture.MM_LINEAR_LINEAR,
            Texture.FM_LINEAR);
    t1.setEnvironmentalMapMode(Texture.EM_SPHERE);
    ts.setTexture(t0, 0);
    ts.setTexture(t1, 1);
    ts.setEnabled(true);
    torus.setRenderState(ts);
    objects.attachChild(torus);

    ts = display.getRenderer().createTextureState();
    t0 =
        TextureManager.loadTexture(
            TestSketch.class.getClassLoader().getResource("jmetest/data/texture/wall.jpg"),
            Texture.MM_LINEAR_LINEAR,
            Texture.FM_LINEAR);
    t0.setWrap(Texture.WM_WRAP_S_WRAP_T);
    ts.setTexture(t0);

    Box box = new Box("box1", new Vector3f(-10, -10, -10), new Vector3f(10, 10, 10));
    box.setLocalTranslation(new Vector3f(0, -7, 0));
    box.setRenderState(ts);
    box.setModelBound(new BoundingBox());
    box.updateModelBound();
    objects.attachChild(box);

    box = new Box("box2", new Vector3f(-5, -5, -5), new Vector3f(5, 5, 5));
    box.setLocalTranslation(new Vector3f(15, 10, 0));
    box.setModelBound(new BoundingBox());
    box.updateModelBound();
    box.setRenderState(ts);
    objects.attachChild(box);

    box = new Box("box4", new Vector3f(-5, -5, -5), new Vector3f(5, 5, 5));
    box.setLocalTranslation(new Vector3f(20, 0, 0));
    box.setModelBound(new BoundingBox());
    box.updateModelBound();
    box.setRenderState(ts);
    objects.attachChild(box);

    box = new Box("box5", new Vector3f(-50, -2, -50), new Vector3f(50, 2, 50));
    box.setLocalTranslation(new Vector3f(0, -15, 0));
    box.setModelBound(new BoundingBox());
    box.updateModelBound();
    box.setRenderState(ts);
    objects.attachChild(box);

    ts = display.getRenderer().createTextureState();
    t0 =
        TextureManager.loadTexture(
            TestSketch.class.getClassLoader().getResource("jmetest/data/texture/cloud_land.jpg"),
            Texture.MM_LINEAR_LINEAR,
            Texture.FM_LINEAR);
    t0.setWrap(Texture.WM_WRAP_S_WRAP_T);
    ts.setTexture(t0);

    box = new Box("floor", new Vector3f(-1000, -10, -1000), new Vector3f(1000, 10, 1000));
    box.setLocalTranslation(new Vector3f(0, -100, 0));
    box.setModelBound(new BoundingBox());
    box.updateModelBound();
    box.setRenderState(ts);
    objects.attachChild(box);

    return objects;
  }
コード例 #15
0
  /**
   * builds the trimesh.
   *
   * @see com.jme.app.SimpleGame#initGame()
   */
  protected void simpleInitGame() {
    display.setTitle("Imposter Test");
    cam.setLocation(new Vector3f(0.0f, 0.0f, 25.0f));
    cam.update();

    // setup the scene to be 'impostered'

    Md2ToJme converter = new Md2ToJme();
    ByteArrayOutputStream BO = new ByteArrayOutputStream();

    URL freak = TestMd2JmeWrite.class.getClassLoader().getResource(FILE_NAME);
    freakmd2 = null;

    try {
      long time = System.currentTimeMillis();
      converter.convert(freak.openStream(), BO);
      logger.info("Time to convert from md2 to .jme:" + (System.currentTimeMillis() - time));
    } catch (IOException e) {
      logger.info("damn exceptions:" + e.getMessage());
    }
    try {
      long time = System.currentTimeMillis();
      freakmd2 =
          (Node) BinaryImporter.getInstance().load(new ByteArrayInputStream(BO.toByteArray()));
      logger.info("Time to convert from .jme to SceneGraph:" + (System.currentTimeMillis() - time));
    } catch (IOException e) {
      logger.info("damn exceptions:" + e.getMessage());
    }

    ((KeyframeController) freakmd2.getChild(0).getController(0)).setSpeed(10);
    ((KeyframeController) freakmd2.getChild(0).getController(0)).setRepeatType(Controller.RT_WRAP);
    fakeScene = new Node("Fake node");
    fakeScene.attachChild(freakmd2);

    // apply the appropriate texture to the imposter scene
    TextureState ts2 = display.getRenderer().createTextureState();
    ts2.setEnabled(true);
    ts2.setTexture(
        TextureManager.loadTexture(
            TestImposterNode.class.getClassLoader().getResource(TEXTURE_NAME),
            Texture.MinificationFilter.Trilinear,
            Texture.MagnificationFilter.Bilinear));
    fakeScene.setRenderState(ts2);

    ZBufferState buf = display.getRenderer().createZBufferState();
    buf.setEnabled(true);
    buf.setFunction(ZBufferState.TestFunction.LessThanOrEqualTo);
    fakeScene.setRenderState(buf);
    fakeScene.updateRenderState();

    // setup the imposter node...
    iNode = new ImposterNode("model imposter", 10, display.getWidth(), display.getHeight());
    iNode.attachChild(fakeScene);
    iNode.setCameraDistance(100);
    iNode.setRedrawRate(.05f); // .05 = update texture 20 times a second on average
    //    iNode.setCameraThreshold(15*FastMath.DEG_TO_RAD);

    // Now add the imposter to a Screen Aligned billboard so the deception is complete.
    BillboardNode bnode = new BillboardNode("imposter bbnode");
    bnode.setAlignment(BillboardNode.SCREEN_ALIGNED);
    bnode.attachChild(iNode);
    rootNode.attachChild(bnode);
  }
コード例 #16
0
  /**
   * set up the scene
   *
   * @see com.jme.app.AbstractGame#initGame()
   */
  protected void simpleInitGame() {
    display.setTitle("Joint Animation");
    display.setVSyncEnabled(true);
    cam.setLocation(new Vector3f(0.0f, 0.0f, 200.0f));
    cam.update();
    ((FirstPersonHandler) input).getKeyboardLookHandler().setActionSpeed(100);

    lightState.setEnabled(false);

    try {
      ResourceLocatorTool.addResourceLocator(
          ResourceLocatorTool.TYPE_TEXTURE,
          new SimpleResourceLocator(
              TestFireMilk.class.getClassLoader().getResource("jmetest/data/model/msascii/")));
      ResourceLocatorTool.addResourceLocator(
          ResourceLocatorTool.TYPE_TEXTURE,
          new SimpleResourceLocator(
              TestFireMilk.class.getClassLoader().getResource("jmetest/data/texture/")));
    } catch (URISyntaxException e1) {
      logger.log(Level.WARNING, "unable to setup texture directories.", e1);
    }

    MilkToJme converter = new MilkToJme();
    URL MSFile =
        TestFireMilk.class.getClassLoader().getResource("jmetest/data/model/msascii/run.ms3d");
    ByteArrayOutputStream BO = new ByteArrayOutputStream();

    try {
      converter.convert(MSFile.openStream(), BO);
    } catch (IOException e) {
      logger.info("IO problem writting the file!!!");
      logger.info(e.getMessage());
      System.exit(0);
    }

    i = null;
    try {
      i = (Node) BinaryImporter.getInstance().load(new ByteArrayInputStream(BO.toByteArray()));
    } catch (IOException e) {
      logger.info("darn exceptions:" + e.getMessage());
    }
    ((JointController) i.getController(0)).setSpeed(1.0f);
    ((JointController) i.getController(0)).setRepeatType(Controller.RT_CYCLE);
    i.setRenderQueueMode(Renderer.QUEUE_OPAQUE);
    rootNode.attachChild(i);

    AlphaState as1 = display.getRenderer().createAlphaState();
    as1.setBlendEnabled(true);
    as1.setSrcFunction(AlphaState.SB_SRC_ALPHA);
    as1.setDstFunction(AlphaState.DB_ONE);
    as1.setTestEnabled(true);
    as1.setTestFunction(AlphaState.TF_GREATER);
    as1.setEnabled(true);

    TextureState ts = display.getRenderer().createTextureState();
    ts.setTexture(
        TextureManager.loadTexture("flaresmall.jpg", Texture.MM_LINEAR_LINEAR, Texture.FM_LINEAR));
    ts.setEnabled(true);

    ParticleMesh manager = ParticleFactory.buildParticles("particles", 200);
    manager.setEmissionDirection(new Vector3f(0.0f, 1.0f, 0.0f));
    manager.setMaximumAngle(0.20943952f);
    manager.getParticleController().setSpeed(1.0f);
    manager.setMinimumLifeTime(150.0f);
    manager.setMaximumLifeTime(225.0f);
    manager.setStartSize(8.0f);
    manager.setEndSize(4.0f);
    manager.setStartColor(new ColorRGBA(1.0f, 0.312f, 0.121f, 1.0f));
    manager.setEndColor(new ColorRGBA(1.0f, 0.312f, 0.121f, 0.0f));
    manager.getParticleController().setControlFlow(false);
    manager.setInitialVelocity(0.12f);
    manager.setGeometry((Geometry) (i.getChild(0)));

    manager.warmUp(60);
    manager.setRenderState(ts);
    manager.setRenderState(as1);
    manager.setLightCombineMode(LightState.OFF);
    manager.setTextureCombineMode(TextureState.REPLACE);
    ZBufferState zstate = display.getRenderer().createZBufferState();
    zstate.setEnabled(false);
    manager.setRenderState(zstate);
    rootNode.attachChild(manager);
  }