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 开源仓库

相关新闻

最新新闻

基于LLM的智能测试框架testzeus-hercules:从Gherkin到自动化执行

基于LLM的智能测试框架testzeus-hercules:从Gherkin到自动化执行

1. 项目概述:当LLM成为你的全能测试工程师 如果你和我一样,在软件测试领域摸爬滚打了十几年,从Selenium的脚本维护地狱,到Pytest的框架封装,再到面对现代Web应用频繁的UI变更、复杂的业务逻辑和跨平台需求,…

2026/7/6 9:39:57
SENet 注意力模块超参调优:压缩比r从2到32的5组实验与最佳实践

SENet 注意力模块超参调优:压缩比r从2到32的5组实验与最佳实践

SENet压缩比调优实战:从理论到最佳参数选择在计算机视觉领域,注意力机制已成为提升模型性能的关键技术之一。SENet(Squeeze-and-Excitation Network)作为通道注意力机制的代表性工作,通过显式建模通道间依赖关系&#…

2026/7/6 9:39:57
Python+Playwright自动化测试环境搭建:跨平台配置与工程化实践

Python+Playwright自动化测试环境搭建:跨平台配置与工程化实践

1. 项目概述:为什么是Python与Playwright? 最近几年,自动化测试领域可以说是“卷”得飞起。从早期的QTP、Selenium,到后来的Cypress、Puppeteer,工具层出不穷。但如果你问我,现在要上手一个兼顾Web、移动端…

2026/7/6 9:39:57
基于视觉语言模型的零代码GUI自动化:从原理到实战应用

基于视觉语言模型的零代码GUI自动化:从原理到实战应用

1. 项目概述:当AI“看见”你的屏幕 想象一下,你每天上班要重复登录十几个内部系统,手动填写表单、点击按钮、导出报表。或者,你是一个软件测试工程师,面对一个界面元素ID经常变动的Web应用,维护传统的基于坐…

2026/7/6 9:39:56
pytest-xdist调度器性能对比:Load、LoadScope与WorkSteal选型指南

pytest-xdist调度器性能对比:Load、LoadScope与WorkSteal选型指南

1. 项目概述:为什么我们需要关心pytest-xdist的调度器? 如果你和我一样,长期在Python测试领域摸爬滚打,那你一定对 pytest 和它的“加速器”插件 pytest-xdist 不陌生。这个插件几乎是中大型项目CI/CD流水线里的标配&#xff…

2026/7/6 9:39:56
从IDOR到拖库:一次AI招聘平台越权漏洞链的深度剖析

从IDOR到拖库:一次AI招聘平台越权漏洞链的深度剖析

1. 项目概述:一次由越权查询引发的连锁反应 最近在复盘一个挺有意思的案例,一个AI招聘平台,从一个小小的越权查询漏洞开始,最终演变成了一场波及大量敏感数据的拖库攻击。泄露的数据里,不仅有常规的姓名、电话、邮箱&a…

2026/7/6 9:34:56

月新闻