J'ai commencé à utiliser Jounkey Moteur récemment, ce qui est très agréable. Mais je suis resté coincé pour essayer de mettre en œuvre la gravité relative.
Je veux rendre les planètes orbiennes les unes autour de l'autre (pas nécessairement dans une orbite parfaitement circulaire, dépend de la vélocité). Donc, chaque objet devrait affecter d'autres objets. P>
Ce que j'ai maintenant: p>
désactiver la gravité globale EM> P> Sphere sphere = new Sphere(50, 50, 5);
Geometry sun = new Geometry("Sun", sphere);
sun.setMaterial(stone_mat);
rootNode.attachChild(sun);
sun.setLocalTranslation(0, 0, 0);
sunPhysics = new RigidBodyControl((float) (50*Math.pow(10, 5)));
sun.addControl(sunPhysics);
bulletAppState.getPhysicsSpace().add(sunPhysics);
Geometry mercury = new Geometry("Mercury", sphere);
mercury.setMaterial(stone_mat);
rootNode.attachChild(mercury);
mercury.setLocalTranslation(15f, 0, 0);
mercuryPhysics = new RigidBodyControl((float) (5));
mercury.addControl(mercuryPhysics);
bulletAppState.getPhysicsSpace().add(mercuryPhysics);
3 Réponses :
La gravité dans la bulletphysique est une direction pour tous les objets.
Vous devez définir la gravité sur 0 comme vous l'avez fait et appliquez une force aussi tous les objets après chaque étape de simulation utilisant la formule P>
F = m * a F - force m - objects mass a - acceleration
Vous pouvez appliquer une force avec une méthode ApplycCentralForce
Merci, je pensais qu'il peut y avoir un moyen «plus simple» de mettre en œuvre cela. Mais pas de problème, je vais essayer de la façon dont vous avez suggéré :)
Si vous voulez un système stable, n'utilisez pas de physique simulée. (Mais si le système a suffisamment d'organes importants, personne ne sait comment il devrait se comporter, de sorte que cela n'a pas d'importance). P>
Pour des choses comme le système solaire, j'utiliserais le mode cinématique pour les planètes (déplacez-les vous-même) et pour les navires, les astéroïdes, etc. Utilisez les forces. (Sauf si vous faites de la Biliard dans le système solaire) p>
La loi de gravitation dit La deuxième loi de Newton dit maintenant, quoi Vous devriez faire est: à chaque étape de la simulation, pour chaque corps, résumez le f = g (m1 *) / r ^ 2 code> où m1 code> et m2 code> sont les masses de la Deux corps et r code> est la distance. g code> est la constante gravitationnelle. f = m * a code>, donc si nous les mettons ensemble, le corps avec masse m1 code> affirmerait une accélération de a = g * m2 / r ^ 2 code> de la traction gravitationnelle du corps avec masse m2 code>. p> A code> S pour l'autre et appliquez cette accélération à la vitesse du corps. P> a(body1) = G * sum[ mass(body2) / dist(body1, body2)^2 , for each body2 ]