Files
esengine/thirdparty/rapier.js/testbed3d/src/demos/damping.ts

43 lines
1.2 KiB
TypeScript
Raw Normal View History

2025-12-03 16:24:08 +08:00
import type {Testbed} from "../Testbed";
type RAPIER_API = typeof import("@dimforge/rapier3d");
export function initWorld(RAPIER: RAPIER_API, testbed: Testbed) {
let gravity = new RAPIER.Vector3(0.0, 0.0, 0.0);
let world = new RAPIER.World(gravity);
/*
* Create the cubes
*/
let num = 10;
let rad = 0.2;
let subdiv = 1.0 / num;
let i;
for (i = 0; i < num; ++i) {
let x = Math.sin(i * subdiv * Math.PI * 2.0);
let y = Math.cos(i * subdiv * Math.PI * 2.0);
// Build the rigid body.
let bodyDesc = RAPIER.RigidBodyDesc.dynamic()
.setTranslation(x, y, 0.0)
.setLinvel(x * 10.0, y * 10.0, 0.0)
.setAngvel(new RAPIER.Vector3(0.0, 0.0, 100.0))
.setLinearDamping((i + 1) * subdiv * 10.0)
.setAngularDamping((num - i) * subdiv * 10.0);
let body = world.createRigidBody(bodyDesc);
// Build the collider.
let colliderDesc = RAPIER.ColliderDesc.cuboid(rad, rad, rad);
world.createCollider(colliderDesc, body);
}
testbed.setWorld(world);
let cameraPosition = {
eye: {x: 0, y: 2.0, z: 20},
target: {x: 0, y: 2.0, z: 0},
};
testbed.lookAt(cameraPosition);
}