ammo.js使用案例
时间: 2023-11-28 22:03:49 浏览: 29
Ammo.js是一个JavaScript物理引擎,它可以用来创建真实的物理效果,例如碰撞检测、物体移动等等。以下是一个使用Ammo.js的简单案例:
```html
<!DOCTYPE html>
<html>
<head>
<title>Ammo.js Example</title>
<script src="ammo.js"></script>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
// 初始化物理引擎
let collisionConfiguration = new Ammo.btDefaultCollisionConfiguration();
let dispatcher = new Ammo.btCollisionDispatcher(collisionConfiguration);
let overlappingPairCache = new Ammo.btDbvtBroadphase();
let solver = new Ammo.btSequentialImpulseConstraintSolver();
let dynamicsWorld = new Ammo.btDiscreteDynamicsWorld(dispatcher, overlappingPairCache, solver, collisionConfiguration);
dynamicsWorld.setGravity(new Ammo.btVector3(0, -10, 0));
// 创建地面
let groundShape = new Ammo.btBoxShape(new Ammo.btVector3(50, 1, 50));
let groundTransform = new Ammo.btTransform();
groundTransform.setIdentity();
groundTransform.setOrigin(new Ammo.btVector3(0, -11, 0));
let groundMass = 0;
let localInertia = new Ammo.btVector3(0, 0, 0);
let motionState = new Ammo.btDefaultMotionState(groundTransform);
let rbInfo = new Ammo.btRigidBodyConstructionInfo(groundMass, motionState, groundShape, localInertia);
let groundRigidBody = new Ammo.btRigidBody(rbInfo);
dynamicsWorld.addRigidBody(groundRigidBody);
// 创建一个球体
let sphereShape = new Ammo.btSphereShape(1);
let startTransform = new Ammo.btTransform();
startTransform.setIdentity();
startTransform.setOrigin(new Ammo.btVector3(0, 20, 0));
let mass = 1;
let isDynamic = true;
localInertia = new Ammo.btVector3(0, 0, 0);
sphereShape.calculateLocalInertia(mass, localInertia);
motionState = new Ammo.btDefaultMotionState(startTransform);
rbInfo = new Ammo.btRigidBodyConstructionInfo(mass, motionState, sphereShape, localInertia);
let sphereRigidBody = new Ammo.btRigidBody(rbInfo);
dynamicsWorld.addRigidBody(sphereRigidBody);
// 模拟物理世界
function render() {
requestAnimationFrame(render);
dynamicsWorld.stepSimulation(1 / 60, 10);
let sphereTransform = new Ammo.btTransform();
sphereRigidBody.getMotionState().getWorldTransform(sphereTransform);
let posX = sphereTransform.getOrigin().x();
let posY = sphereTransform.getOrigin().y();
let posZ = sphereTransform.getOrigin().z();
console.log("球的位置:x=" + posX + ", y=" + posY + ", z=" + posZ);
}
render();
</script>
</body>
</html>
```
这段代码创建了一个物理世界,其中包含一个平面作为地面和一个球体。随着时间的推移,球体会受到重力的作用而下落,当它碰到地面时会弹起。通过获取球体的位置,可以模拟物体的运动。