fly63前端网

www.fly63.com

首页文章资源工具教程 栏目
  • 关于我们
  • 网站投稿
  • 赞助一下
搜索

在线工具_工作生活好帮手

打造各种简单、易用、便捷的在线工具,网友无需注册和下载安装即可使用

点击查看

关闭

提交网站

Oimo.js
分享
复制链接
新浪微博
QQ 好友

扫一扫分享

网站地址:https://lo-th.github.io/Oimo.js/
GitHub:https://github.com/lo-th/Oimo.js
网站描述:一个用于JavaScript的轻量级3d物理引擎

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

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


引入:
Oimo的引入非常简单
<script src="js/oimo.min.js"></script>


新建:
创建一个Oimo物理世界
world = new OIMO.World({ 
    timestep: 1/60, 
    iterations: 8, 
    broadphase: 2, // 1 brute force, 2 sweep and prune, 3 volume tree
    worldscale: 1, // scale full world 
    random: true,  // randomize sample
    info: false,   // calculate statistic or not
    gravity: [0,-9.8,0] 
});
timestep ------ 物理世界的刷新频率,通常为60帧每秒,之前在项目中为了提高性能,降低cpu的消耗,将此值改为1/30即30帧每秒,导致原先计算准确的物理碰撞发生计算不灵敏的情况,尤其是在开启重力感应后,和重力感应相关的物理碰撞计算,建议尽量维持60帧,除非你所需要计算的内容对精度要求真的不高,只要模拟个大概。
broadphase ------ 碰撞检测算法类型,1 暴力算法 2 及/或扫掠裁减(sweep and prune)算法,这是目前市面上最常见的碰撞检测算法 3 volume tree算法(中文名不详)目前探究发现,使用2号算法是最稳定的,但是所要花费的性能也是最高的
volume tree ------- 物理世界的缩放
random ------ 是否使用随机样本
gravity ------ 重力加速度的大小,x,y,z三个方向可设置

向物理世界添加物理物体:
var body = world.add({ 
    type:'sphere', // type of shape : sphere, box, cylinder 
    size:[1,1,1], // size of shape
    pos:[0,0,0], // start position in degree
    rot:[0,0,90], // start rotation in degree
    move:true, // dynamic or statique
    density: 1,
    friction: 0.2,
    restitution: 0.2,
    belongsTo: 1, // The bits of the collision groups to which the shape belongs.
    collidesWith: 0xffffffff; // The bits of the collision groups with which the shape collides.
});
type ------ 物理物体的类型,球体、长方体、圆柱体
size ------ 物理物体的大小
pos ------ 物理物体的位置
rot ------ 物理物体的旋转角度
move ------ 物理物体是否是静态的
density ------ 物理物体的密度,可以用来增加物体的质量
friction ------ 物理物体的摩擦系数
restitution ------ 物理物体的弹性系数
belongsTo ------ 物理物体所属的组别


物理物体的常用属性:
body.prototype
allowSleep ----- 是否允许刚体休眠
currentRotation ------ 当前的旋转角度(使用欧拉角表示)
isStatic ------ 是否静态
newOrientation ------ 用来更新物理物体的四元数时的暂存
newPosition ------ 用来位置更新,功能同上
newRotation ------ 用来角度更新,功能同上
orientation ------ 当前的四元数,可以直接修改
parent ------ 物理节点的父节点
position ------ 当前的位置,可以直接修改
rotation ------ 当前旋转角度,可以直接修改
sleeping ------ 当前休眠状态

常用方法:
addShape ------ 给刚体添加一个形状,添加完以后必须调用setupMass才能生效
awake ------ 强行唤醒休眠中的刚体,防止当物体进入休眠后就不会再动的问题
getAxis ------ 获取物理物体的旋转轴
getPosition ------ 获取物理物体的位置
getQuaternion ------ 获取物理物体的四元数
isLonely ------- 判断物理物体是否和别的物体没有接触
remove ---- 删除物理物体
removeShape ------ 删除形状
resetPosition ------ 重置位置
resetQuaternion ------ 重置四元数
resetRotation ------ 重置角度
setPosition ------ 设置位置
setParent ------ 设置父级
setRotation ------ 设置角度
setQuaternion ------ 设置四元数
sleep ------ 强制进入刚体休眠
world.getContact(xxx,xxx) ------ 碰撞检测函数,只返回true和false,无法知晓是谁碰了谁


链接: https://fly63.com/nav/4051

more>>
相关栏目
Cocos
html5游戏开发,Android游戏开发工具的首选
官网GitHub
egret白鹭引擎
Egret是一套HTML5游戏开发解决方案
官网GitHub
GSAP
一个“轻量级”、“高效率”、强大的2D动画引擎
官网GitHub
EaselJS
用于创建游戏,生成艺术作品,和处理其他高级图形化的js库
官网GitHub
Space.js
用于创建 UI 和面板组件
官网GitHub
Phaser
PC端和移动端HTML5游戏框架
官网GitHub
Crafty.js
一个比较简单、轻量的基于Javascript的开源html5游戏框架
官网GitHub
stage.js
一个2D HTML5 JavaScript library 跨平台的游戏开发
官网GitHub
QICI青瓷引擎
一款开源免费的 JavaScript 游戏引擎类库
官网GitHub
boardgame.io
基于 React 的游戏框架
官网GitHub
react-game-kit
利用 React 和 React Native 开发游戏的组件库
官网GitHub
planck.js
开发创建跨平台 HTML5 游戏的 2D JavaScript 物理引擎
官网GitHub
PhysicsJS
基于JavaScript的强大的物理引擎
官网GitHub
webglstudio.js
浏览器里的3D开发环境
点击进入GitHub
cax
小程序、小游戏以及 Web 通用 Canvas 渲染引擎
官网GitHub
layaair
开源游戏引擎
官网GitHub

手机预览