Cannon.js
Utvecklare | Stefan Hedman |
---|---|
Stabil frisättning | 0.6.2 / 28 mars 2015
|
Förvar | |
Skrivet i | JavaScript |
Operativ system | OS oberoende |
Typ | 3D- fysikmotor |
Licens | MIT-licens |
Hemsida |
Cannon.js är en JavaScript 3D- fysikmotor med öppen källkod skapad av Stefan "schteppe" Hedman. Till skillnad från fysikmotorbibliotek porterade från C++ till JavaScript, är cannon.js skriven i JavaScript från början och kan dra nytta av dess funktioner. I en jämförelse 2013 med Ammo.js visade sig cannon.js vara "mer kompakt, mer begriplig, mer kraftfull med avseende på dess prestanda och även lättare att förstå", men hade inte så många funktioner.
Funktioner
Cannon.js stöder följande former: sfär, plan, låda, cylinder, konvex polyeder , partikel och höjdfält . Den här samlingen av former matchar samlingen som används för att rendera motorer som Three.js och Babylon , men är inte komplett. Det räcker till exempel inte med X3DOM, en applikation av X3D som gör att 3D-grafik kan inkluderas på webbsidor utan behov av ett plug-in .
Fysikmotorn implementerar styv kroppsdynamik, diskret kollisionsdetektering och en Gauss-Seidel- begränsningslösare. Den kan utföra tygsimulering
Cannon.js kan användas med Three.js och Babylon.js WebGL-renderare för att generera fysikbaserade 3D-scener. Den kan också användas för att tillhandahålla nätverksbaserad fysiksynkronisering för onlinespel med flera spelare med hjälp av Lance.gg
Exempel
Exempelkoden nedan skapar en sfär på ett plan, stegar simuleringen och skriver ut sfärsimuleringen till konsolen. Observera att Cannon.js använder SI-enheter (meter, kilogram, sekund, etc.).
0 0
0 0
0
// Setup our world var world = new CANNON . Världen (); världen . gravitation . set ( , , - 9,82 ); // m/s² // Skapa en sfär var radius = 1 ; // m var sphereBody = new CANNON . Kropp ({ massa : 5 , // kg position : ny KANON . Vec3 ( , , 10 ), // m form : ny KANON . Sfär ( radie ) }); världen . addBody ( sphereBody ); // Skapa ett plan var groundBody = new CANNON . Kropp ({ massa : // massa == 0 gör kroppen statisk }); var groundShape = ny CANNON . Plan (); grundkropp . addShape ( groundShape ); världen . addBody ( groundBody ); var fixedTimeStep = 1.0 / 60.0 ; // sekunder var maxSubSteps = 3 ; // Starta simuleringsslingan var lastTime ; ( funktion simloop ( tid ) { requestAnimationFrame ( simloop ); if ( lastTime !== undefined ) { var dt = ( time - lastTime ) / 1000 ; world . step ( fixedTimeStep , dt , maxSubSteps ); } console . log ( "Sphere z position: " + sphereBody . position . z ); lastTime = tid ; })();