3. Rigid body dynamic_冲突文件_zkx_20240828215918
最后更新于
最后更新于
What is rigid body dynamics
Rigid Body Motion
只允许平移和旋转,不影响形变
Translation Motion
位置用质量中心的位置表示
需要考虑位置和时间的关系
加速度 = 质量分之一 * 力关于时间的积分,力的产生比较复杂,用 f 表示
位置和速度都可以写成关于时间的方程, 下个速度或位置都可以由积分得到
积分的套路
函数的面积估计
一阶近似
一阶近似隐式表示
MId-point 二阶准确
半隐式积分
交错积分,更好的解释
力的类型 Types of Forces
重力
阻力,用速度衰减代替阻力
速度和位置迭代
用正交矩阵来表示旋转有缺陷
冗余,不直观,无法求导角速度
欧拉角表示旋转 万向节锁死,无法求导角速度,Unity 是 ZXY
四元数表示旋转
可以用复数来表示 2D 空间中的常数 3D 向量没法表示 3D 空间中的常数,因为没法定义其除法 所以用四元数表示 3D 空间中的常数
Quaternion Arithematic 四元数计算
unity 里 Quatenion 中 xyz 是 ijk,w 是 s
用四元数表示旋转 用四元数旋转顶点是:四元数转旋转矩阵,再右乘顶点
在 Unity 里旋转的三种表示方法
可以用 3D 向量表示带方向的角速度
求力矩和转动惯量
更新旋转的时候,将其看作 q * q
旋转计算完 q 后需要归一化
总的更新流程
重力不造成力矩,或者造成所有顶点加速度相同的力,都不造成力矩。
力矩是造成物体旋转的趋势
对力矩造成旋转的抵抗量,用矩阵表示,而不是类似质量的标量。和物体当前的旋转有关,是实时变化的。
reference state :局部空间
currect state :世界空间
I_ref :可以预计算,实时算 Inertia 可以用两边乘 R 快速计算。
旋转更新步骤