个人笔记帖
webgl吧
全部回复
仅看楼主
level 4
白黑乌拉 楼主
2024年11月13日 14点11分 1
level 4
白黑乌拉 楼主
简单的学习了threejs的api后,想用一下ammojs来进行物理碰撞。但死活找不到文档,搜了一下好像是因为ammojs是bullet转过来的,所以就去看了看bullet的官方使用书(全是英语没看懂),后来找到了以下几个ammojs相关的,API文档github上的ammojs-doc,还有一个ammojs的教程medium的blue magnificent大大写的。额外找到了一个对ammojs的封装库enable3d。简单看了下挺齐全的,准备等看了那ammojs再去看看enable3d
2024年11月13日 14点11分 3
level 4
白黑乌拉 楼主
设置一个物理世界,实例化一个btDiscreteDynamicsWorld对象,参数分别为btDefaultCollisionConfiguration(碰撞配置用于碰撞检测算法)、btCollisionDispatcher(碰撞调度器注册一个promise回调,过滤重叠的粗略阶段代理,以便系统的其余部分不会处理碰撞)、btSequentialImpulseConstraintSolver(用于考虑重力、游戏逻辑提供的力、碰撞、铰链约束)、btDiscreteDynamicsWorld(离散物理世界,也有支持流体的物理世界btSoftRigidDynamicsWorld)
2024年11月13日 16点11分 4
level 4
白黑乌拉 楼主
物理世界及刚体等对象并不是场景中,物理世界是用于可能的交互进行建模,需要自行根据物理对象的状态更新来,对场景中的模型或其他进行对象进行交换
2024年11月13日 16点11分 5
level 4
白黑乌拉 楼主
如果想将刚体设置为静态,则将其质量设置为0,如地面可设置为0,大于0则为动态刚体
2024年11月13日 16点11分 6
level 4
白黑乌拉 楼主
btTransform 是 Ammo.js 中用于表示刚体的变换的类,它包含了位置信息和旋转信息。这个类对于在物理世界中设置和获取对象的变换至关重要。
作用
btTransform 类表示一个刚体在物理世界中的位置和方向。它包含一个 btVector3 用于位置和一个 btQuaternion 用于旋转。这个类通常用于创建物理对象时设置其初始位置和方向,以及从物理引擎中获取变换数据。
常用方法
setIdentity():将 btTransform 重置为单位变换,表示没有任何平移或旋转。
setOrigin(btVector3):设置变换的平移部分,即位置。
setRotation(btQuaternion):设置变换的旋转部分。
getOrigin():获取 btVector3 表示的位置。
getRotation():获取 btQuaternion 表示的旋转。
2024年11月13日 16点11分 7
level 4
白黑乌拉 楼主
let motionState = new Ammo.btDefaultMotionState( transform );用于此接口充当物理模拟和对象的图形表示之间的桥梁。它确保物理世界可以更新对象的变换(位置和方向),并且可以检索此变换以进行渲染。
2024年11月14日 03点11分 8
level 4
白黑乌拉 楼主
对于两个刚体的碰撞检测,需要先知道每个刚体都有一个Group,Mask。如果我们需要让两个刚体进行碰撞,则需要让A刚体的Group与B刚体的Mask进行按位操作,B的Group与A的Mask进行按位操作,如果结果都是非零。则代表这两个刚体可进行碰撞
2024年11月15日 08点11分 9
level 4
白黑乌拉 楼主
设置碰撞刚体,应在物理世界对象的addRigidBody方法内进行,在添加刚体时,额外增加两个形参,分别为Group和Mask
2024年11月15日 08点11分 10
level 4
白黑乌拉 楼主
约束(关节)
约束组件就是将两个刚体连接在一起,有三种方式连接
1.点对点:点对点约束限制平移,以便两个刚体的局部枢轴点在世界空间中匹配。可以使用此约束连接刚体链。
2.铰链约束:铰链约束或旋转关节限制两个额外的角度自由度,因此实体只能围绕一个轴(铰链轴)旋转。这对于表示围绕一个轴旋转的门或轮子很有用。用户可以指定铰链的限位和电机。
3.滑块约束:滑块约束允许实体绕一个轴旋转并沿该轴平移。
4.Cone Twist Constraint(圆锥体扭曲约束):这是一个特殊的点对点约束,用于添加圆锥体和扭曲轴限制。x 轴用作 Twist Axis。要创建人偶,圆锥体扭曲约束对于上臂等肢体非常有用。
2024年11月15日 08点11分 11
level 4
白黑乌拉 楼主
2024年11月15日 08点11分 12
level 4
白黑乌拉 楼主
ammojs中包含ammo.idl 文件可了解 ammo.js 中向 JavaScript 公开的其他 Bullet 类和接口。
2024年11月15日 08点11分 13
level 4
白黑乌拉 楼主
Bullet中一共有三种状态的对象
动态刚体:正质量,每个模拟帧动态刚体都会更新其世界变换
静态刚体:质量为0,无法移动,只能碰撞
运动学刚体:质量为0,可由用户进行动画处理,但交互方式只有一种:动态对象将被推开,但不受动态对象的影响。
2024年11月15日 08点11分 14
level 4
白黑乌拉 楼主
要移动动力学刚体,可以使用 applyForce、applyImpulse 或 setLinearVelocity 。这些都是刚体方法。
applyForce 和 applyImpulse“将导致身体加速,因此您的角色将具有动量”,但在本教程中,我们将使用 setLinearVelocity。
2024年11月15日 09点11分 15
level 4
白黑乌拉 楼主
对一个球体进行wasd键位移动,先配置变量
2024年11月15日 09点11分 16
1 2 尾页