8
votes

Gravité relative

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


0 commentaires

3 Réponses :


1
votes

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 


2 commentaires

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é :)



0
votes

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).

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)


0 commentaires

3
votes

La loi de gravitation dit 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.

La deuxième loi de Newton dit 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>

maintenant, quoi Vous devriez faire est: à chaque étape de la simulation, pour chaque corps, résumez le 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 ]


0 commentaires