Cannon.js
Deweloperzy | Stefana Hedmana |
---|---|
Wersja stabilna | 0.6.2 / 28 marca 2015
|
Magazyn | |
Napisane w | JavaScript |
System operacyjny | Niezależny od systemu operacyjnego |
Typ | Silnik fizyki 3D |
Licencja | Licencja MIT |
Strona internetowa |
Cannon.js to silnik fizyki JavaScript 3D typu open source, stworzony przez Stefana „schteppe” Hedmana. W przeciwieństwie do bibliotek silnika fizycznego przeniesionych z C++ do JavaScript, cannon.js jest od początku napisany w JavaScript i może korzystać z jego funkcji. W porównaniu z Ammo.js z 2013 r. Cannon.js okazał się „bardziej zwarty, bardziej zrozumiały, wydajniejszy pod względem wydajności, a także łatwiejszy do zrozumienia”, ale nie miał tak wielu funkcji.
Cechy
Cannon.js obsługuje następujące kształty: kula, płaszczyzna, pudełko, walec, wielościan wypukły , cząstka i pole wysokości . Ta kolekcja kształtów jest zgodna z kolekcją używaną przez silniki renderujące, takie jak Three.js i Babylon , ale nie jest kompletna. Na przykład nie wystarczy X3DOM, aplikacja X3D , która umożliwia umieszczanie grafiki 3D na stronach internetowych bez potrzeby stosowania wtyczek .
Silnik fizyki implementuje dynamikę ciała sztywnego, dyskretne wykrywanie kolizji i narzędzie do rozwiązywania ograniczeń Gaussa-Seidela . Może wykonywać symulację tkaniny
Cannon.js może być używany z rendererami Three.js i Babylon.js WebGL do generowania scen 3D opartych na fizyce. Może być również używany do synchronizacji fizyki w sieci dla gier online dla wielu graczy za pomocą Lance.gg
Przykład
Poniższy przykładowy kod tworzy kulę na płaszczyźnie, przeprowadza symulację krok po kroku i drukuje symulację kuli w konsoli. Zauważ, że Cannon.js używa jednostek SI (metr, kilogram, sekunda itd.).
0 0
0 0
0
// Skonfiguruj nasz świat var world = new CANNON . Świat (); świat . grawitacja . zestaw ( , , - 9,82 ); // m/s² // Utwórz kulę var radius = 1 ; // m var sphereBody = new CANNON . Ciało ({ masa : 5 , // kg pozycja : nowa DZIAŁKA . Vec3 ( , , 10 ), // m kształt : nowa DZIAŁKA . Kula ( promień ) }); świat . dodaj Ciało ( Ciało sfery ); // Utwórz płaszczyznę var groundBody = new CANNON . Ciało ({ masa : // masa == 0 sprawia, że ciało jest statyczne }); var groundShape = nowy DZIAŁ . Samolot (); ziemiaCiało . addKształt ( Kształt podłoża ); świat . addBody ( groundBody ); var ustalony krok czasu = 1,0 / 60,0 ; // sekundy var maxSubSteps = 3 ; // Uruchom pętlę symulacji var lastTime ; ( funkcja simloop ( czas ) { requestAnimationFrame ( simloop ) ; if ( lastTime ! == undefined ) { var dt = ( time - lastTime ) / 1000 ; world.step ( fixedTimeStep , dt , maxSubSteps ); } console.log ( " Kula z pozycja: " + ciało sfery . pozycja . z ); lastTime = czas ; })();