炫酷!这些 JS 库赋予你创造世界的能力

three.js——物理引擎 剖析案例中物理引擎Ammo.js的使用方法,其中包含运动、碰撞、检测、自由落体、碰撞器、冻结、自定义更新等功能,有大量代码通过链接方式转到gitee,可以根据代码对照使用主要剖析的是threejs中提供的案例,相对于原本案例,本篇文章精简了一些代码,提取了一些方法,新增了一些可配置参数,并结合我上一篇文章做了一个小Demo。先看一下效果从图片中可以看出来,小球在落地时,触碰到人物模型的头部,改变了运动方向,后面人物模型行走时,可以踢球,改变球的运动速度。 阅读详情

你好,我是坚持分享干货的 EarlGrey,翻译出版过《Python编程无师自通》、《Python并行计算手册》等技术书籍。

如果我的分享对你有帮助,请关注我,一起向上进击。

创作不易,希望大家给一点鼓励,把公众号设置为“星标”,给文章点个“赞”和“在看”,谢谢大家啦~

下面这张截图来自某个开发者网站,网站被他打造成了一个仿真世界,我们通过上下左右键可以控制图片中央那辆卡车。想不想为你的网站添加类似的 3D 和仿真效果?

1d5003603e9384e3f5abf2d2f2e47d9f.png

这些效果背后是由JavaScript物理引擎驱动的,它们为开发者提供了强大的工具,用于在Web应用程序和游戏中实现真实的物理效果。这些库使得模拟物理现象、碰撞检测和运动仿真等任务变得更加容易。

本文将介绍一些受欢迎的JavaScript物理引擎库。

1、3D 引擎库

主要推荐4个,分别为 Ammo.js、Cannon.js、Oimo.js 和 Rapier。

Ammo.js

基于著名的物理引擎 Bullet physics engine ,原为 C++ 实现,作者使用 Emscripten 重写为 JavaScript 实现。

Ammo.js 支持 3D 物理仿真,包括刚体、软体、碰撞检测、约束、车辆等功能。Ammo.js 可以与 Three.js 等 3D 渲染库结合使用,创建出逼真的 3D 场景和效果。

Ammo.js 的 GitHub 仓库有近4千个星标,表明它有一定的受欢迎程度和社区支持。

  • 网站:http://schteppe.github.io/ammo.js-demos/

  • Git 仓库:https://github.com/kripken/ammo.js/

  • 文档:无文档

  • Bullet(用 C++ 编写的物理引擎)的 JavaScript 直接移植版

  • 有点重

  • 8年前发布,npm每周下载量 255,仍由社区更新

Cannon.js
69f6d0616c8f51c4a0c04b917b8ab34e.png

Cannon.js 是一个轻量级的 3D 物理引擎库,它使用 GJK 算法进行碰撞检测,支持多种形状的刚体,包括球体、平面、盒子、圆柱体、高地图等。

Cannon.js 还支持弹性、摩擦力、重力、睡眠和静态物体、约束等功能。Cannon.js 可以与 Three.js 等 3D 渲染库结合使用,创建出有趣的 3D 场景和效果。

Cannon.js 的 GitHub 仓库有超过 4k 的星标,表明它有一定的受欢迎程度和社区支持。

  • 网站:https://schteppe.github.io/cannon.js/

  • Git 仓库:https://github.com/schteppe/cannon.js

  • 文档:http://schteppe.github.io/cannon.js/docs/

  • 比 Ammo.js 更轻

  • 比 Ammo.js 更易于实现

  • 主要由一名开发人员维护

  • 多年未更新,近1年内npm每周下载2800多

  • 有一个维护的分支

Oimo.js
0ffc4fb0ac12666478fb5bc2c44cbca7.jpeg
oimojs

Oimo.js 是一个专注于性能的 3D 物理引擎库,它使用 BVH 算法进行碰撞检测,支持多种形状的刚体,包括球体、盒子、圆柱体、胶囊、锥体、多面体等。

Oimo.js 还支持摩擦力、弹性、重力、睡眠和静态物体、约束、弹簧等功能。

  • 网站:https://lo-th.github.io/Oimo.js/

  • Git 仓库:https://github.com/lo-th/Oimo.js

  • 文档:http://lo-th.github.io/Oimo.js/docs.html

  • 比 Ammo.js 更轻

  • 比 Ammo.js 更容易实现

  • 主要由一名开发人员维护

  • 两年未更新

Rapier
b07a294b3288e9293d440d2eeab79a86.png

rapier 是一个快速的 2D 和 3D 物理引擎库,它是用 Rust 语言编写的,也提供了 WebAssembly 和 JavaScript 的支持。

rapier 支持 2D 和 3D 物理仿真,包括刚体、碰撞检测、约束、摩擦力、弹性、重力、事件监听、场景查询等功能。rapier 可以与 Babylon.js 等 3D 渲染库结合使用,创建出高性能的 3D 场景和效果。

rapier 的 GitHub 仓库有超过 2k 的星标,表明它有一定的受欢迎程度和社区支持。

  • 网站:https://rapier.rs/

  • Git 仓库:https://github.com/dimforge/rapier

  • 文档:https://rapier.rs/javascript3d/index.html

  • 与 Cannon.js 非常相似

  • 性能良好

  • 目前正在维护

2、2D 引擎库

2D引擎库有很多,这里只介绍最受欢迎的几个。

Matter.js
3692ae1248292abcde5f91df77f715aa.jpeg
mattejs

Matter.js 是一个用于 Web 的 JavaScript 2D 物理引擎库,该项目诞生于 2014 年,它相较于老牌的 Box2D 引擎库,Matter.js 更为轻量级,并且在性能和功能方面也不逊色。

Matter.js 支持 2D 物理仿真,包括刚体、复合体、组合体、凹面和凸面、弹性、摩擦力、事件监听、约束、重力、睡眠和静态物体、圆角等功能。Matter.js 还提供了基于 Canvas 的渲染器,可以结合 p2.js 与 CreateJS 或 Egret 渲染引擎使用。

Matter.js 的 GitHub 仓库有超过 10k 的星标,表明它有很高的受欢迎程度和社区支持。

37e5744e8a385c737af5c454534d7d65.png
  • 网站:https://brm.io/matter-js/

  • Git 仓库:https://github.com/liabru/matter-js

  • 文档:https://brm.io/matter-js/docs/

  • 主要由一名开发人员维护

  • 仍在更新

P2.js
7d86c7e7d806d6d0cb922bb8735b829f.png

p2.js 是一个轻量级的 2D 物理引擎库,它使用 GJK 算法进行碰撞检测,支持多种形状的刚体,包括圆形、矩形、线段、胶囊、多边形等。p2.js 还支持摩擦力、弹性、重力、睡眠和静态物体、约束、弹簧、车辆等功能。

p2.js 可以与 Phaser 等 2D 游戏框架结合使用,创建出有趣的 2D 游戏和效果。

p2.js 的 GitHub 仓库有超过 3k 的星标。

它具有以下特点:

高性能:p2.js通过使用高效的算法和数据结构,实现了快速的碰撞检测和稳定的物理模拟,即使在大量物体的情况下也能保持良好的性能。

灵活性:p2.js提供了灵活的API和配置选项,使得开发者可以根据自己的需求调整物理模拟的行为和性能。

轻量级:p2.js的文件大小较小,加载速度快,适合在网络环境较差的情况下使用。

可扩展性:p2.js支持自定义碰撞形状和约束等扩展,开发者可以根据自己的需求添加新的功能。

  • 网站:https://schteppe.github.io/p2.js/

  • Git 仓库:https://github.com/schteppe/p2.js

  • 文档:http://schteppe.github.io/p2.js/docs/

  • 主要由一名开发人员维护(与 Cannon.js 相同)

  • 两年未更新

Planck.js

planck.js 是一个 2D 物理引擎库,它是基于著名的 Box2D C++ 物理引擎库的 JavaScript/TypeScript 重写。

planck.js 支持 2D 物理仿真,包括刚体、复合体、碰撞检测、约束、摩擦力、弹性、重力等功能。planck.js 可以与 Pixi.js 等 2D 渲染库结合使用,创建出有趣的 2D 场景和效果。

planck.js 的 GitHub 仓库有超过 1.5k 的星标。

  • 网站:https://piqnt.com/planck.js/

  • Git 仓库:https://github.com/shakiba/planck.js

  • 文档:https://github.com/shakiba/planck.js/tree/master/docs

  • 主要由一名开发人员维护

  • 目前仍在更新

Box2D.js
a4076a84579824169b3b509c6a69dc05.png

Box2D.js是一款基于C++的物理引擎库Box2D的JavaScript移植版本。它是一款功能强大且广泛应用于游戏开发的2D物理引擎。

Box2D.js 在 Github 上有 1.3k 星标。

Box2D.js的特点包括:

真实的物理模拟:Box2D.js提供了高度准确且稳定的物理模拟,包括刚体运动、碰撞检测和约束等功能。

丰富的功能:Box2D.js支持各种类型的刚体、关节和碰撞形状,以及强大的约束和碰撞过滤功能。

广泛的应用:Box2D.js被广泛应用于众多成功的游戏项目,如《Angry Birds》和《Hill Climb Racing》等。

活跃的社区:Box2D.js拥有庞大的开发者社区,提供了大量的教程、示例和支持。

  • 网站:http://kripken.github.io/box2d.js/demo/webgl/box2d.html

  • Git 仓库:https://github.com/kripken/box2d.js/

  • 文档:无文档

  • 主要由一名开发人员维护(与 Ammo.js 相同)

  • 目前仍在更新

3、小结

物理引擎库有很多。建议大家根据自己的需求选择,并不是非要使用 3D 库,2D 库的性能通常要高得多。

如果你能将物理经验总结为 2D 碰撞,那么你最好使用 2D 库。

- EOF -

文章已经看到这了,别忘了在右下角点个“赞”和“在看”鼓励哦~

推荐阅读  点击标题可跳转

1、VS Code 变身小霸王游戏机!

2、认知升级:模型与范式转换

3、超赞的 Python 编译器,单核提速100倍

4、高效的终极秘诀

5、Python 3.12 版本有什么变化?

回复下方「关键词」,获取优质资源

回复关键词「 pybook03」,领取进击的Grey与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「书单02」,领取进击的Grey整理的 10 本 Python 入门书的电子版

👇关注我的公众号👇

告诉你更多细节干货

33096f65bdb6d7c71a7f82a61ea22e25.jpeg

欢迎围观我的朋友圈

👆每天更新所想所悟

Three.js与物理引擎深度整合:Ammo.js实现刚体碰撞检测与软体动力学仿真 Three.js与物理引擎深度整合:Ammo.js实现刚体碰撞检测与软体动力学仿真。 阅读详情

相关推荐

释放创造力与效率:探索Claude技能系统的奇妙世界

技能是Claude的动态扩展包,包含了完成特定任务所需的指令和资源。它们就像是Claude的“记忆卡”,可以随时插入以解锁新能力,比如生成艺术、测试网页应用或处理复杂文档格式。这种模块化设计的核心在于其灵活性:无论是创意工作者、开发者还是企业用户,都可以找到适合自己的技能。更重要的是,仓库中的技能示例是开源的(Apache 2.0许可),这意味着你可以自由探索、修改甚至为自己的项目量身定制新技能。

步子哥的博客 725

Ammo.js - 简介

Ammo.js 使用Emscripten将 Bullet物理引擎 直接移植到JavaScript。源代码被直接翻译成JavaScript,未进行人工重写,因此功能与原始项目相同。 Bullet Physics是一个开源的物理模拟引擎,世界三大物理引擎之一(另外两种是Havok和PhysX)。支持Bullet Physics物理引擎的设计软件有 Blender 3D; Cienma 4D; LightWave 3D Core 3Ds Max Maya …… 因此,作为其JS版本的Ammo.js,其功能也是

木·本的博客 9303

用p5.js创造耳朵形状徽标的生成器

p5.js是一个开源的JavaScript库,它使得创造性编程变得更加容易和可访问。它为初学者和专业人士提供了一个简化版的Processing环境。这个库通过一系列图形和动画的内置函数,允许用户在网页浏览器中创建视觉艺术。项目的起点是创造一个独特的,能够代表开源精神和创意自由的徽标。徽标设计采用耳朵这一形象元素,代表着“倾听”和“理解”,在开源社区中,这是建立有效沟通和合作的关键。通过赋予一个简单的图形以象征意义,项目旨在探索如何通过视觉艺术传达深层次的社区文化。

weixin_42576410的博客 1190

ammo.js - 一个基于WebGL的3D物理引擎

#ammo.js - 一个基于WebGL的3D物理引擎 项目地址:https://gitcode.com/gh_mirrors/am/ammo.js 如果你正在寻找一个强大的3D物理引擎来为你的Web应用程序添加真实的物理效果,那么ammo.js可能就是你需要的。 什么是ammo.js? ammo.js是一个开源的JavaScript库,它是基于Bullet物理引擎的WebGL实现。它提供了各种物...

gitblog_00086的博客 2477

基于HTML5的炫酷3D图片视差滚动特效实战源码

keyframes是 CSS 中用于定义动画关键帧的核心规则块,它允许开发者指定某一时间段内元素样式的变化路径。其基本语法结构如下:0% {opacity: 0;上述代码定义了一个名为fly-bird的动画序列,描述了一只鸟从出现、上升并旋转、再回落消失的过程。其中0%表示动画起始状态,100%为结束状态,中间可插入任意百分比节点来细化运动曲线。逻辑逐行解读:第1行。

weixin_28931449的博客 1013

编程与写作:创造无限可能

本文介绍了作者如何通过学习编程和写作找到激情,并用Pablo Picasso的名言“Everything you can imagine is real.”来总结其背后的驱动力。文章还提到了作者的其他出版物,并预告了《学习编程书籍2》的发布信息。

weixin_42594427的博客 263

探索动画的魅力:Vivus.js——赋予SVG生命的强大JavaScript库

Vivus.js是一款轻量级的JavaScript库,能够为SVG图像创建绘制动画效果,让静态的SVG图形仿佛被实时绘制出来一般生动。它无需任何依赖,提供了多种动画模式和自定义选项,是前端开发者为网页添加动态视觉效果的理想选择。 ## 为什么选择Vivus.js? 在现代网页设计中,动态元素能够极大提升用户体验。Vivus.js通过巧妙运用CSS的`strokeDashoffset`属性,实现

gitblog_00008的博客 676

创造程序员的表白心形页面:HTML、CSS与JavaScript实践

为了使表白页面更加具有个性化,添加一些自定义元素是必要的。其中,自定义字体和背景音乐的添加将使页面更加生动。自定义字体能够极大提升页面的视觉吸引力。通过Web字体技术,如Google Fonts或Adobe Fonts,可以轻松实现。-- 在HTML中链接字体 -->/* 在CSS中应用字体 */h1 {

weixin_42376614的博客 1145

推荐文章:探索字体的无限可能——variableFont.js带你进入可变字体的世界

推荐文章:探索字体的无限可能——variableFont.js带你进入可变字体的世界 在数字化设计的浪潮中,字体不仅是信息传递的载体,更是视觉艺术的灵魂。今天,我们特别推荐一款前沿的JavaScript库——variableFont.js,它将为你开启一个全新的字体控制维度,让每一份创意都拥有无尽可能。 项目介绍 variableFont.js是一个专为利用可变字体而生的JavaScript库,它...

gitblog_00746的博客 640

rapier.js:Rapier物理引擎的官方JavaScript绑定

| JavaScript编程语言的2D和3D物理引擎(官方绑定)。

planck.js:2D JavaScript物理引擎

Planck.js Planck.js是Box2D物理引擎JavaScript重写,用于跨平台HTML5游戏开发。 动机 利用Box2D的努力和成就 开发可读且可维护JavaScript代码 针对Web和移动平台优化库 提供JavaScript友好的API 文献资料 -这是在编写代码之前开始和学习基础知识的最佳位置 -具有可编辑代码的在线示例 讲解 学习Box2D高级用法的有用文章的集合 社区 -社区讨论和问答 更新和新闻 源代码和问题 API和架构 Planck.js包含未经修改的Box2D算法,其架构与Box2D非常相似。 但是,在重写过程中会进行一些内部更改和重构,以解决C ++和JavaScript之间的差异。 Planck.js公共API紧跟Box2D API,但有以下区别: 从类名中删除了b2前缀,例如b2World现在可以作为planck.World 。 方法名称从UpperCamelCase转换为LowerCamelCase。 定义类/对象(BodyDef,FixtureDef等)被内联JavaScript对象( {} )取代。 形状被认为是不可变的,并且在

发现全新视角:纯JavaScript的PowerPoint操作利器 - js-pptx

在数字办公领域中,我们常常被束缚于特定平台或工具之下,而如今,一款名为[js-pptx](https://github.com/protobi/js-pptx)的开源项目正在打破这一局限,引领我们走向更自由的文档处理新时代。 ### 项目介绍 js-pptx是一款采用纯净JavaScript编写的PowerPoint(.pptx)文件读取、编写与编辑库,支持在Node.js和浏览器环境中运行。...

gitblog_00045的博客 2404

Oimo.js:适用于JavaScript的轻量级3D物理引擎

Oimo.js是用于JavaScript的轻量级3d物理引擎。 这是的完整javascript转换最初由为actionscript 3.0创建。 家 (正在进行中) 文件 (进行中) 演示版 地形测试 汽车测试 沃克测试 工人测试 用法 下载缩小的库,并将其包含在HTML中。 或者,使用Node并安装软件包: npm install oimo < script src =" js/oimo.min.js " > </ script > 创建物理世界: world = new OIMO . World ( { timestep : 1 / 60 , iterations : 8 , broadphase : 2 , // 1 brute force, 2 sweep and prune, 3 volume tree worldscale :

推荐文章:探索OkraByte,JavaScript世界的纯OCR引擎

推荐文章:探索OkraByte,JavaScript世界的纯OCR引擎 在数字化时代的浪潮中,文本识别技术成为了连接物理与数字世界的关键桥梁。今天,我们为您揭开一个令人兴奋的开源项目——OkraByte的神秘面纱。这是一款专为Node.js打造的纯JavaScript OCR(光学字符识别)库,为开发者提供了高效便捷的文字识别解决方案。 项目介绍 OkraByte,由技艺高超的程序员Yosuke ...

gitblog_00658的博客 365

ammo.js:使用Emscripten将Bullet物理引擎直接移植到JavaScript

ammo.js 演示版 概述 示例代码可让您对API有所了解: 与进行交互 ammo.js是使用Emscripten将直接移植到JavaScript的端口。 源代码直接翻译为JavaScript,无需人工重写,因此功能应与原始Bullet相同。 注意:ammo.js刚刚更新为新的移植方法。 如果发现不需要的Bullet API的某些部分,请参阅 'ammo'代表“通过编译C ++的项目符号来避免制作自己的js物理引擎”;) 就像Bullet一样,ammo.js是zlib许可的。 讨论在Mozilla服务器(irc.mozilla.org)上的#emscripten上的IRC上进行。 指示 builds/ammo.js包含builds/ammo.js的预构建版本。 这可能就是您想要的。 您也可以自己构建ammo.js。 用法 最直接的事情是,如果您想用C ++编写代码,然后在

香橙派5B-RK3588-NPU内核升级至0.9.8:RKLLM多模态部署实战

本文详细介绍了香橙派5B-RK3588设备NPU内核升级至0.9.8版本的完整流程,重点讲解了升级的必要性、两种升级方案(预编译包安装与自行编译内核)以及RKLLM SDK的安装配置。通过实战演示多模态模型转换与推理,显著提升AI计算性能,为嵌入式AI部署提供实用指南。

salt9的博客 1027

网页背景炫酷升级:5步教你用Canvas打造会‘躲猫猫’的粒子特效

本文详细介绍了如何利用Canvas技术,通过五个步骤为网页创建交互式粒子背景特效。该特效核心在于实现鼠标跟随与点击散开的动态交互,粒子会根据鼠标位置进行聚集或散开,形成‘躲猫猫’般的趣味视觉效果。教程涵盖从Canvas初始化、粒子类设计、连线逻辑到行为定义与性能优化的完整流程,帮助前端开发者打造炫酷且响应式的动态背景。

green的博客 1046

树莓派教程(基于python编程)--入门篇

一:格式化SD卡 SD卡插入读卡器连接电脑,使用SDFormatter对SD卡进行格式化 (重装烧录也要进行着SD卡格式化操作) 二:下载官方镜像 http://downloads.raspberrypi.org/raspbian_latest 三:烧录SD卡 使用Win32DiskImager将镜像烧录到格式化后的SD卡 SD卡盘根目录(/boot)下新建一个命名为ssh的...

qq_42109746的博客 6万+

WyW-in-JS:零运行时CSS-in-JS库的终极工具包

WyW-in-JS:零运行时CSS-in-JS库的终极工具包 项目介绍 WyW-in-JS,全称为“Whatever-you-want-in-JS”,是世界上首个用于创建各种零运行时CSS-in-JS库的工具包。它不仅仅是一个库,更是一个强大的工具集,赋予开发者构建自定义解决方案的能力,完全摆脱特定实现的束缚。 起源 WyW-in-JS的诞生源于对Linaria库的深入研究和改进。Linaria本...

gitblog_00083的博客 617

第33次CCF-CSP认证考试 第一题 词频统计 满分题解

本人小白一枚,抱着学习的态度想到网上找一些csp的参考答案,但由于实力有限,大佬的代码大都看不太懂,于是萌生了想用一些简单,基础的语句完成csp前两题的想法并公开,以便与像我这样实力不强的同学交流学习,如有更好的建议,还请斧正,感谢!

qq_75242106的博客 1869

银河麒麟V10 SP3下NFS客户端挂载失败?5个常见问题排查与修复

本文针对银河麒麟V10 SP3系统中NFS客户端挂载失败的常见问题,提供了5个实战排查方案。从基础服务状态检查到防火墙配置、版本兼容性、/etc/fstab设置及权限映射,详细解析了问题根源与解决方案,帮助用户快速恢复NFS文件共享功能。

weixin_42525005的博客 363

JavaScript可视化:点亮数据之美

JavaScript不仅是网页开发的基石,更是数据可视化领域不可或缺的力量。它赋予数据生命,让复杂的信息触手可及,激发人们的想象力和创造力。不论是初学者还是资深开发者,掌握JavaScript可视化技术都将为你的职业生涯添砖加瓦,让你在数据的海洋中航行得更加自信和从容。让我们一起拥抱数据可视化带来的美好未来吧!

2401_87476075的博客 1001

【GB28181】wvp-GB28181-pro++ZLMediaKit编译安装国标流媒体服务器教程(Windows平台)

本文基于ZMLMediaKit+WVP-PRO在windows平台进行编译部署GB28181平台,网上教程也比较多,都大同小异,实际操作过程中容易出错的地方也比较多:redis安装无密码,mysql安装后密码的修改以及wvp数据可的创建,配置文件侧修改,尤其是和端口相关的项,再就是运行服务时各种错误需要注意,常见的错误已经做了汇总,遇到问题大家不要怕,找到报错的地方查看定位即可。

废人一枚的博客 4479
上一篇: PortX:比 Xshell 更强大,跨平台且免费!
下一篇: 大厂程序员提倡“防御性编程”,是自保还是作死?
codingpy
博客等级 码龄11年 1873粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值