Cannon.js

Cannon.js
Utvecklare Stefan Hedman
Stabil frisättning
0.6.2 / 28 mars 2015 ( 2015-03-28 )
Förvar
Skrivet i JavaScript
Operativ system OS oberoende
Typ 3D- fysikmotor
Licens MIT-licens
Hemsida www .cannonjs .org

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  ;  })(); 

externa länkar