Three.js 物理ammo使用教程 物理ammo使用 ·Ammo Physics· ▶ 在线运行案例案例合集三维可视化功能案例threehub.cn开源仓库github地址https://github.com/z2586300277/three-cesium-examples400个案例代码:网盘链接你将学到什么OrbitControls 相机轨道交互requestAnimationFrame渲染循环与resize自适应效果说明本案例演示物理ammo使用效果基于 WebGL 实现「物理ammo使用」可视化效果附完整可运行源码核心用到 OrbitControls。建议先打开文首在线案例查看动态画面再对照下方源码逐步理解。核心概念Scene / Camera / WebGLRenderer构成最小渲染闭环大场景可开logarithmicDepthBuffer缓解 Z-fighting。OrbitControls提供轨道旋转/缩放开启enableDamping后需在 animate 中controls.update()。阅读下方完整源码时建议从init/load/animate三条主线入手再深入 shader 与工具函数。实现步骤搭建 Scene、PerspectiveCamera、WebGLRenderer挂载 canvas 并处理resize创建 OrbitControls及 Raycaster 等交互控件若源码包含在requestAnimationFrame循环中更新状态并 renderCesium 为viewer.render或自动渲染代码要点import * as THREE from threeimport { OrbitControls } from three/addons/controls/OrbitControls.js import { AmmoPhysics } from three/addons/physics/AmmoPhysics.jsconst box document.getElementById(box)const scene new THREE.Scene()const camera new THREE.PerspectiveCamera(60, box.clientWidth / box.clientHeight, 1, 10000)camera.position.set(15, 15, 15)const renderer new THREE.WebGLRenderer({ antialias: true })renderer.setSize(box.clientWidth, box.clientHeight)box.appendChild(renderer.domElement)new OrbitControls(camera, renderer.domElement)scene.add(new THREE.DirectionalLight(0xffffff, 3))// 安装 const physics await AmmoPhysics()const floor new THREE.Mesh(new THREE.BoxGeometry(60, 5, 60), new THREE.MeshLambertMaterial({ color: 0x444444 }))floor.position.y - 20floor.userData.physics { mass: 0 }scene.add(floor)for (let i 0; i 100; i) {const geometry Math.random() 0.5 ? new THREE.IcosahedronGeometry() : new THREE.SphereGeometry()const material new THREE.MeshLambertMaterial({ color: 0xffffff * Math.random() })const mesh new THREE.Mesh(geometry, material)mesh.position.set(Math.random() - 0.5, Math.random() * 2, Math.random() - 0.5)mesh.userData.physics { mass: 1 }scene.add(mesh)}physics.addScene(scene) // 启动物理引擎animate()function animate() {renderer.render(scene, camera)requestAnimationFrame(animate) }完整源码GitHub小结本文提供物理ammo使用完整 Three.js 源码与在线 Demo建议先运行案例再改 uniform/参数做二次实验更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库