diff options
Diffstat (limited to 'engine/src/core/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java')
-rw-r--r-- | engine/src/core/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/engine/src/core/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java b/engine/src/core/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java new file mode 100644 index 0000000..1c5d687 --- /dev/null +++ b/engine/src/core/com/jme3/effect/shapes/EmitterMeshConvexHullShape.java @@ -0,0 +1,63 @@ +package com.jme3.effect.shapes; + +import com.jme3.math.FastMath; +import com.jme3.math.Vector3f; +import com.jme3.scene.Mesh; +import java.util.List; + +/** + * This emiter shape emits the particles from the given shape's interior constrained by its convex hull + * (a geometry that tightly wraps the mesh). So in case of multiple meshes some vertices may appear + * in a space between them. + * @author Marcin Roguski (Kaelthas) + */ +public class EmitterMeshConvexHullShape extends EmitterMeshFaceShape { + + /** + * Empty constructor. Sets nothing. + */ + public EmitterMeshConvexHullShape() { + } + + /** + * Constructor. It stores a copy of vertex list of all meshes. + * @param meshes + * a list of meshes that will form the emitter's shape + */ + public EmitterMeshConvexHullShape(List<Mesh> meshes) { + super(meshes); + } + + /** + * This method fills the point with coordinates of randomly selected point inside a convex hull + * of randomly selected mesh. + * @param store + * the variable to store with coordinates of randomly selected selected point inside a convex hull + * of randomly selected mesh + */ + @Override + public void getRandomPoint(Vector3f store) { + super.getRandomPoint(store); + // now move the point from the meshe's face towards the center of the mesh + // the center is in (0, 0, 0) in the local coordinates + store.multLocal(FastMath.nextRandomFloat()); + } + + /** + * This method fills the point with coordinates of randomly selected point inside a convex hull + * of randomly selected mesh. + * The normal param is not used. + * @param store + * the variable to store with coordinates of randomly selected selected point inside a convex hull + * of randomly selected mesh + * @param normal + * not used in this class + */ + @Override + public void getRandomPointAndNormal(Vector3f store, Vector3f normal) { + super.getRandomPointAndNormal(store, normal); + // now move the point from the meshe's face towards the center of the mesh + // the center is in (0, 0, 0) in the local coordinates + store.multLocal(FastMath.nextRandomFloat()); + } +} |