3. Rigid body dynamic_冲突文件_zkx_20240828215918

What is rigid body dynamics

Rigid Bodies

Rigid Body Motion

只允许平移和旋转,不影响形变

Translation Motion

位置用质量中心的位置表示

需要考虑位置和时间的关系

image.png

加速度 = 质量分之一 * 力关于时间的积分,力的产生比较复杂,用 f 表示

位置和速度都可以写成关于时间的方程, 下个速度或位置都可以由积分得到

积分的套路

函数的面积估计

一阶近似

image.png

一阶近似隐式表示

image.png

MId-point 二阶准确

image.png

半隐式积分

image.png

交错积分,更好的解释

image.png

力的类型 Types of Forces

  • 重力

  • 阻力,用速度衰减代替阻力

image.png

速度和位置迭代

image.png

Rotation Motion

用正交矩阵来表示旋转有缺陷

冗余,不直观,无法求导角速度

image.png

欧拉角表示旋转 万向节锁死,无法求导角速度,Unity 是 ZXY

image.png

四元数表示旋转

可以用复数来表示 2D 空间中的常数 3D 向量没法表示 3D 空间中的常数,因为没法定义其除法 所以用四元数表示 3D 空间中的常数

image.png

Quaternion Arithematic 四元数计算

image.png

unity 里 Quatenion 中 xyz 是 ijk,w 是 s

用四元数表示旋转 用四元数旋转顶点是:四元数转旋转矩阵,再右乘顶点

image.png

在 Unity 里旋转的三种表示方法

image.png

可以用 3D 向量表示带方向的角速度

image.png

Torque and Inertia

求力矩和转动惯量

image.png

更新旋转的时候,将其看作 q * q

image.png

旋转计算完 q 后需要归一化

旋转更新步骤

总的更新流程

image.png

重力不造成力矩,或者造成所有顶点加速度相同的力,都不造成力矩。

力矩 Torque

力矩是造成物体旋转的趋势

image.png

转动惯量 Inertia

对力矩造成旋转的抵抗量,用矩阵表示,而不是类似质量的标量。和物体当前的旋转有关,是实时变化的。

image.png
image.png
  • reference state :局部空间

  • currect state :世界空间

  • I_ref :可以预计算,实时算 Inertia 可以用两边乘 R 快速计算。

最后更新于

这有帮助吗?