Git Product home page Git Product logo

cannon.js's Introduction

cannon.js

Lightweight 3D physics for the web

Inspired by three.js and ammo.js, and driven by the fact that the web lacks a physics engine, here comes cannon.js.

Demos - Documentation - Rendering hints - NPM package

Usage

Download the library and include it in your html. Alternatively, build the library yourself (see Makefile).

<script src="cannon.js"></script>

The code below creates a sphere on a plane, steps the simulation, and prints the sphere simulation to the console.

// Setup our world
var world = new CANNON.World();
world.gravity.set(0,0,-9.82);
world.broadphase = new CANNON.NaiveBroadphase();
    
// Create a sphere
var mass = 5, radius = 1;
var sphereShape = new CANNON.Sphere(radius);
var sphereBody = new CANNON.RigidBody(mass,sphereShape);
sphereBody.position.set(0,0,10);
world.add(sphereBody);
    
// Create a plane
var groundShape = new CANNON.Plane();
var groundBody = new CANNON.RigidBody(0,groundShape);
world.add(groundBody);
    
// Step the simulation
setInterval(function(){
  world.step(1.0/60.0);
  console.log("Sphere z position: " + sphereBody.position.z);
}, 1000.0/60.0);

If you want to know how to use cannon.js with a rendering engine, for example Three.js, see the Examples.

Supported contact shape pairs

Sphere Plane Box Compound Convex¹ Particle
Sphere Yes Yes Yes Yes Yes Yes
Plane - - Yes Yes Yes Yes
Box - - Yes Yes Yes Yes
Compound - - - Yes Yes Yes
Convex¹ - - - - Yes Yes
Particle - - - - - -

¹ including Cylinder

Change log

Current

  • Changed API for adding forces and impulses to a body. See RigidBody.addImpulse and RigidBody.addForce.
  • Removed World.collision_matrix and instead added World.collisionMatrix and World.collisionMatrixPrevious. They both now work with body indices instead of body IDs.
  • Added SPHSystem.
  • Renamed RigidBody.calculateAABB to .computeAABB. Added RigidBody.aabbNeedsUpdate.
  • Added Broadphase.useBoundingBoxes, .doBoundingBoxBroadphase and .intersectionTest.
  • ConvexPolyhedron constructor now calculates normals instead of taking them as a parameter.
  • Added Body.collisionFilterGroup and Body.collisionFilterMask.
  • Added GridBroadphase, though it only supports Plane and Sphere for now.
  • Removed World.temp.
  • Reuse of various event objects to minimize object creation in the step loop.
  • Removed unused class ContactPoint.
  • Changed the signature of Broadphase.collisionPairs to Broadphase.collisionPairs(world,pairs1,pairs2), removing the need of an array return value.

0.5.0

  • Changed unit of sleep properties in Particle to seconds instead of milliseconds, made Particle.sleepState public. (schteppe,airbaggins).
  • Changed property Shape.boundingSphereRadius to being a number, added method Shape.computeBoundingSphereRadius and .boundingSphereRadiusNeedsUpdate
  • Removed Box.getCorners
  • Added properties to ContactMaterial: .contactEquationStiffness, .contactEquationRegularizationTime, .frictionEquationStiffness, .frictionEquationRegularizationTime to be able to control settings for the on-the-fly created contact constraints
  • Renamed the solver parameter "damping" to "regularizationTime", since it is a more correct name.
  • Solver parameters (stiffness, damping etc) were moved from Solver to Equation. Now you control the solver parameters per constraint instead of globally.
  • Added HingeConstraint and its Constraint base class
  • Added contact support for all possible Shape.types (see table above).
  • Fixed convex contact bugs.
  • Added method ConvexPolyhedron.getAveragePointLocal.
  • Added method ConvexPolyhedron.transformAllPoints.
  • Added SplitSolver.
  • Removed use of typed arrays, since they are slower than ordinary ones.
  • Corrected applying of linear and angular damping, should now be physically correct and independent of timestep size.
  • Renamed Solver to GSSolver, made Solver a base class instead.
  • Added method Mat3.setTrace
  • ContactGenerator now produces ContactEquation instead of ContactPoint
  • Added property Solver.tolerance
  • Changed default Solver parameter values
  • Improved Solver algorithm, the parameters .a, .b, .k, .d, .eps do not have the same effect anymore.
  • Rewrote Solver, Equation and Constraint totally, broke backward compatibility.
  • Added property World.enableImpulses - still an experimental feature
  • Added PointToPointConstraint
  • Added Cylinder.
  • Added method RigidBody.applyImpulse
  • Added "iterator" method Box.forEachWorldCorner
  • Added "abstract method" Shape.calculateWorldAABB and implemented it in subclasses.
  • Removed Plane.normal in favor of RigidBody.quaternion. One way to rotate a plane is enough.

0.4.3

  • World now dispatches "preStep" and "postStep" events.
  • Introduced Body and Particle. New inheritance: Body -> Particle -> RigidBody.
  • Added Quaternion.toAxisAngle()
  • Added Ray. Basic hit testing for ConvexPolyhedra.
  • RigidBody now dispatches the following events: "collide", "sleep", "sleepy", "wakeup"
  • Added Solver.setSpookParams(k,d) and removed SPOOK param things from World.
  • Sleep functionality for RigidBody

0.4.2 2012-08-06

  • Code seem stable enough to start a change log.

Todo

The simpler todos are marked with @todo in the code. Github Issues can and should also be used for todos.

Help

Create an issue on here if you need help.

cannon.js's People

Contributors

chrisforbes avatar groe avatar mrdoob avatar onionhammer avatar plepers avatar schteppe avatar timrwood avatar wivlaro avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.