Three.js 物理cannon使用教程 物理cannon使用 ·Physics Mesh· ▶ 在线运行案例案例合集三维可视化功能案例threehub.cn开源仓库github地址https://github.com/z2586300277/three-cesium-examples400个案例代码:网盘链接你将学到什么OrbitControls 相机轨道交互物理引擎刚体碰撞requestAnimationFrame渲染循环与resize自适应效果说明本案例演示物理cannon使用效果基于 WebGL 实现「物理cannon使用」可视化效果附完整可运行源码核心用到 OrbitControls、物理引擎刚体碰撞。建议先打开文首在线案例查看动态画面再对照下方源码逐步理解。核心概念OrbitControls轨道旋转缩放开enableDamping时每帧需controls.update()。实现步骤搭建 Scene / Camera / Renderer 与 OrbitControlsrAF 循环中 update 并 render代码要点import * as THREE from threeimport { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import * as CANNON from cannon-es;const box document.getElementById(box)const scene new THREE.Scene()const camera new THREE.PerspectiveCamera(75, box.clientWidth / box.clientHeight, 0.1, 1000)camera.position.set(0, 10, 10)const renderer new THREE.WebGLRenderer()renderer.setSize(box.clientWidth, box.clientHeight)box.appendChild(renderer.domElement)new OrbitControls(camera, renderer.domElement)scene.add(new THREE.AxesHelper(5000), new THREE.AmbientLight(0xffffff, 0.5))const pointLight new THREE.PointLight(0xffffff, 3, 0)pointLight.position.set(0, 2, 0)scene.add(pointLight)const world new CANNON.World({ gravity: new CANNON.Vec3(0, -9.82, 0) })// 渲染时间略有不同的时间显示物理模拟的状态 world.PhysicsRender (deltaTime) {world.step(1 / 60, deltaTime, 3)world.bodies.forEach(body body.render?.())}// 创建一个立方体 const cubeGeometry new THREE.BoxGeometry(1, 1, 1)const cubeMaterial new THREE.MeshStandardMaterial({ color: 0xffffff })const cubeMesh new THREE.Mesh(cubeGeometry, cubeMaterial)cubeMesh.position.set(0, 5, 0)createPhysicsBody(world, cubeMesh, 1)scene.add(cubeMesh)// 创建一个平面 const planeGeometry new THREE.PlaneGeometry(10, 10)const planeMaterial new THREE.MeshStandardMaterial({ color: 0xffffff, side: THREE.DoubleSide })const planeMesh new THREE.Mesh(planeGeometry, planeMaterial)planeMesh.rotation.x Math.PI / 2createPhysicsBody(world, planeMesh, 0)scene.add(planeMesh)animate()function animate() {requestAnimationFrame(animate)world.PhysicsRender()renderer.render(scene, camera)}window.onresize () {renderer.setSize(box.clientWidth, box.clientHeight)camera.aspect box.clientWidth / box.clientHeightcamera.updateProjectionMatrix()}function createPhysicsBody(PhysicsWorld, model, mass) {const box new THREE.Box3().setFromObject(model);const { max, min } boxconst center new THREE.Vector3();box.getCenter(center);const body new CANNON.Body({mass: mass,shape: new CANNON.Box(new CANNON.Vec3((max.x - min.x) / 2, (max.y - min.y) / 2, (max.z - min.z) / 2)),position: center,})body.position.copy(model.position)PhysicsWorld.addBody(body)body.render () model.position.copy(body.position)}完整源码GitHub小结本文提供物理cannon使用完整 Three.js 源码与在线 Demo建议先运行案例再改 uniform/参数做二次实验更多 Three.js 实战案例见 three-cesium-examples 合集 与 GitHub 开源仓库

相关新闻

最新新闻

一个双非软件工程本科生的逆风翻盘经历

一个双非软件工程本科生的逆风翻盘经历

写在前面 我的高考分数不高,只上了一个很一般的学校,也对自己的专业不感兴趣。但庆幸的是,大学四年,我慢慢的对编程产生了兴趣,学会了如何学习并走入了编程的大门。 后来还算顺利吧!考上了某211硕&#xff…

2026/8/27 19:08:31
多角色对话 AI 配音,短剧旁白轻松制作

多角色对话 AI 配音,短剧旁白轻松制作

短剧赛道持续升温,从竖屏微短剧到小说推文配画面,"一人旁白 多角色对话"几乎成了标配结构。但多角色配音恰恰是 AI 配音中最容易翻车的环节——角色声音撞型、情绪衔接断裂、旁白和对话混在一起没有层次感。本文从多角色配音的实际难点出发&a…

2026/8/27 19:08:31
实测11款AI配音工具,真正能商用的只有这几个

实测11款AI配音工具,真正能商用的只有这几个

先声明:无广!纯自用踩坑经验,看完能帮你省至少500块会员费 👇😤 踩坑篇:这些雷我替你们踩过了坑1:某知名大厂工具(不点名了) 号称"免费试用",结果2…

2026/8/27 19:08:31
爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战

爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战

前言 “小步快跑、快速迭代”的开发大环境下,“一套代码、多端运行”是很多开发团队的梦想,美团也一样。他们做了很多跨平台开发框架的尝试:React Native、Weex、PWA 等等。但都没有得到很好的解决,直至遇到Flutter。 Flutter 提供…

2026/8/27 19:08:31
干了5年Android开发,突然感觉自己啥也不会,啥也不想干,还要继续吗?

干了5年Android开发,突然感觉自己啥也不会,啥也不想干,还要继续吗?

这是在某论坛看到的一名同行的吐槽:我干了差不多5年,不过给人感觉跟只有两三年的人一样。 我觉得我不适合干程序员,主要是新东西的接受能力比其他人慢,Android技术又更新得很快,感觉总是跟不上。年纪有些大了&#xff…

2026/8/27 19:08:31
首发!谷歌大佬分享:基于Android Studio介绍的《Android零基础入门教材》,限时开放下载!

首发!谷歌大佬分享:基于Android Studio介绍的《Android零基础入门教材》,限时开放下载!

我仍记得几年前刚开始进入Android开发这个广阔而又神秘的世界时,手足无措的样子。 那时,要找到好的教程真的很难,搜索谷歌,阅读各种鱼龙混杂的文章,上StackOverflow查找答案是我搜集Android知识的唯一途径。但是随着时…

2026/8/27 19:03:31