Home | History | Annotate | Download | only in shapes
      1 package com.jme3.effect.shapes;
      2 
      3 import com.jme3.math.FastMath;
      4 import com.jme3.math.Vector3f;
      5 import com.jme3.scene.Mesh;
      6 import java.util.List;
      7 
      8 /**
      9  * This emiter shape emits the particles from the given shape's interior constrained by its convex hull
     10  * (a geometry that tightly wraps the mesh). So in case of multiple meshes some vertices may appear
     11  * in a space between them.
     12  * @author Marcin Roguski (Kaelthas)
     13  */
     14 public class EmitterMeshConvexHullShape extends EmitterMeshFaceShape {
     15 
     16     /**
     17      * Empty constructor. Sets nothing.
     18      */
     19     public EmitterMeshConvexHullShape() {
     20     }
     21 
     22     /**
     23      * Constructor. It stores a copy of vertex list of all meshes.
     24      * @param meshes
     25      *        a list of meshes that will form the emitter's shape
     26      */
     27     public EmitterMeshConvexHullShape(List<Mesh> meshes) {
     28         super(meshes);
     29     }
     30 
     31     /**
     32      * This method fills the point with coordinates of randomly selected point inside a convex hull
     33      * of randomly selected mesh.
     34      * @param store
     35      *        the variable to store with coordinates of randomly selected selected point inside a convex hull
     36      *        of randomly selected mesh
     37      */
     38     @Override
     39     public void getRandomPoint(Vector3f store) {
     40         super.getRandomPoint(store);
     41         // now move the point from the meshe's face towards the center of the mesh
     42         // the center is in (0, 0, 0) in the local coordinates
     43         store.multLocal(FastMath.nextRandomFloat());
     44     }
     45 
     46     /**
     47      * This method fills the point with coordinates of randomly selected point inside a convex hull
     48      * of randomly selected mesh.
     49      * The normal param is not used.
     50      * @param store
     51      *        the variable to store with coordinates of randomly selected selected point inside a convex hull
     52      *        of randomly selected mesh
     53      * @param normal
     54      *        not used in this class
     55      */
     56     @Override
     57     public void getRandomPointAndNormal(Vector3f store, Vector3f normal) {
     58         super.getRandomPointAndNormal(store, normal);
     59         // now move the point from the meshe's face towards the center of the mesh
     60         // the center is in (0, 0, 0) in the local coordinates
     61         store.multLocal(FastMath.nextRandomFloat());
     62     }
     63 }
     64