Class VerletPhysics3D

java.lang.Object
toxi.physics3d.VerletPhysics3D

public class VerletPhysics3D extends Object
3D particle physics engine using Verlet integration based on: http://en.wikipedia.org/wiki/Verlet_integration http://www.teknikus.dk/tj/gdc2001.htm
  • Field Details

  • Constructor Details

    • VerletPhysics3D

      public VerletPhysics3D()
      Initializes a Verlet engine instance using the default values.
    • VerletPhysics3D

      public VerletPhysics3D(Vec3D gravity, int numIterations, float drag, float timeStep)
      Initializes an Verlet engine instance with the passed in configuration.
      Parameters:
      gravity - 3D gravity vector
      numIterations - iterations per time step for verlet solver
      drag - drag value 0...1
      timeStep - time step for calculating forces
  • Method Details

    • addConstraintToAll

      public static void addConstraintToAll(ParticleConstraint3D c, List<VerletParticle3D> list)
    • removeConstraintFromAll

      public static void removeConstraintFromAll(ParticleConstraint3D c, List<VerletParticle3D> list)
    • addBehavior

      public void addBehavior(ParticleBehavior3D behavior)
    • addConstraint

      public void addConstraint(ParticleConstraint3D constraint)
    • addParticle

      public VerletPhysics3D addParticle(VerletParticle3D p)
      Adds a particle to the list
      Parameters:
      p -
      Returns:
      itself
    • addSpring

      public VerletPhysics3D addSpring(VerletSpring3D s)
      Adds a spring connector
      Parameters:
      s -
      Returns:
      itself
    • clear

      public VerletPhysics3D clear()
    • getCurrentBounds

      public AABB getCurrentBounds()
    • getDrag

      public float getDrag()
    • getNumIterations

      public int getNumIterations()
      Returns:
      the numIterations
    • getSpring

      public VerletSpring3D getSpring(Vec3D a, Vec3D b)
      Attempts to find the spring element between the 2 particles supplied
      Parameters:
      a - particle 1
      b - particle 2
      Returns:
      spring instance, or null if not found
    • getTimeStep

      public float getTimeStep()
      Returns:
      the timeStep
    • getWorldBounds

      public AABB getWorldBounds()
      Returns:
      the worldBounds
    • removeBehavior

      public boolean removeBehavior(ParticleBehavior3D b)
    • removeConstraint

      public boolean removeConstraint(ParticleConstraint3D c)
    • removeParticle

      public boolean removeParticle(VerletParticle3D p)
      Removes a particle from the simulation.
      Parameters:
      p - particle to remove
      Returns:
      true, if removed successfully
    • removeSpring

      public boolean removeSpring(VerletSpring3D s)
      Removes a spring connector from the simulation instance.
      Parameters:
      s - spring to remove
      Returns:
      true, if the spring has been removed
    • removeSpringElements

      public boolean removeSpringElements(VerletSpring3D s)
      Removes a spring connector and its both end point particles from the simulation
      Parameters:
      s - spring to remove
      Returns:
      true, only if spring AND particles have been removed successfully
    • setDrag

      public void setDrag(float drag)
    • setNumIterations

      public void setNumIterations(int numIterations)
      Parameters:
      numIterations - the numIterations to set
    • setTimeStep

      public void setTimeStep(float timeStep)
      Parameters:
      timeStep - the timeStep to set
    • setWorldBounds

      public VerletPhysics3D setWorldBounds(AABB world)
      Sets bounding box
      Parameters:
      world -
      Returns:
      itself
    • update

      public VerletPhysics3D update()
      Progresses the physics simulation by 1 time step and updates all forces and particle positions accordingly
      Returns:
      itself