Spring Systems
Create spring-like behavior with physics:
// Create a spring joint
const spring = new BABYLON.PhysicsJoint(
BABYLON.PhysicsJoint.SpringJoint, {
length: 5, // Rest length
stiffness: 50, // Spring strength
damping: 0.5, // Damping factor
collision: true // Allow connected bodies to collide
}
);
// Create anchor point
const springAnchor = BABYLON.MeshBuilder.CreateSphere("anchor", {diameter: 1}, scene);
springAnchor.position.y = 15;
springAnchor.physicsImpostor = new BABYLON.PhysicsImpostor(
springAnchor,
BABYLON.PhysicsImpostor.SphereImpostor,
{ mass: 0 }, // Fixed position
scene
);
// Create suspended object
const bob = BABYLON.MeshBuilder.CreateSphere("bob", {diameter: 2}, scene);
bob.position.y = 10;
bob.physicsImpostor = new BABYLON.PhysicsImpostor(
bob,
BABYLON.PhysicsImpostor.SphereImpostor,
{ mass: 2, restitution: 0.6 },
scene
);
// Connect with spring joint
springAnchor.physicsImpostor.addJoint(bob.physicsImpostor, spring);
// Visualize the spring connection with a line
const springLine = BABYLON.MeshBuilder.CreateLines("springLine", {
points: [springAnchor.position, bob.position],
updatable: true
}, scene);
// Update the line in the render loop
scene.onBeforeRenderObservable.add(() => {
springLine = BABYLON.MeshBuilder.CreateLines("springLine", {
points: [springAnchor.position, bob.position],
instance: springLine
});
});