我最近开始使用jMonkey引擎,这非常好。但是我在尝试实现相对引力方面陷入困境。
我想使行星彼此绕行(不一定是完美的圆形轨道,取决于速度)。因此,每个对象都应影响其他对象。
我现在所拥有的:
关闭全局引力
bulletAppState.getPhysicsSpace().setGravity(Vector3f.ZERO);
初始化球体并添加到物理空间
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);
我注意到RigidBodyControl类中有setGravity方法,但它只是设置方向。因此,对象以这种方式移动,直到消失为止。
我真的很期待得到答案。
最佳答案
子弹物理学中的重力是所有物体的一个方向。
您应该像对待重力一样将重力设置为0,并在每个模拟步骤之后使用以下公式对所有对象施加力
F = m * a
F - force
m - objects mass
a - acceleration
地球上的常规加速度是
g == 9.8
在太空中,加速度可能每个都取决于与一个或多个行星的距离。
如果您想模拟《愤怒的小鸟空间》之类的游戏,那么您应该考虑阅读有关该游戏中重力的文章
http://www.wired.com/wiredscience/2012/03/the-gravitational-force-in-angry-birds-space/