THREE.JS / FOUNDATIONS 200

One contract. Three worlds.

Rapier, Jolt, and Ammo all bridge a Three.js scene to a separate rigid-body world, but their wrappers do not promise the same operations. This lab renders the same indexed InstancedMesh rig three times so the shared boundary and the API differences stay visible together.

Initializing 3 addon bridges

Preparing three independent scenes and physics worlds...

live backends
0 / 3
indexed bodies
0
selected
-
fallbacks
0
render frames
0
Shared experiment controlssame seed, same actions

Click a box or sphere in any panel to select its indexed body. Shared actions target the selected kind and index in every backend, making transform and force differences comparable.

Wrapper contract matrixofficial addon surface
operationRapierJoltAmmo
async initRapierPhysics()JoltPhysics()AmmoPhysics()
addSceneyesyesyes
setMeshPositionindexedindexedindexed
applyImpulseyes——
setMeshVelocityyesno-op source—
removeMeshyes——
heightfieldyes——
official dispose———
RAPIER / RUST WASM

Rapier

loading
bodies
-
selected
-
active API
-
state
loading
JOLT / C++ WASM

Jolt

loading
bodies
-
selected
-
active API
-
state
loading
AMMO / BULLET WASM

Ammo

loading
bodies
-
selected
-
active API
-
state
loading

Based on the official physics instancing examples and addon docs. The wrappers own private fixed-rate timers; this route disposes the Three.js renderers and makes that addon lifecycle boundary explicit.

THREE.JS FOUNDATIONS LAB