1.ode引擎中的几何体
ode物理引擎中的几何体有球体,盒子,胶囊,射线,平面,圆柱,网格等等
对于一般的几何体比如球体,盒子等其默认的位置为原点,也就是其中心点在坐标原点
那么对于box来说描述一个盒子只需要3个参变量分别为长高宽
对于Capped Cylinder来说
其特点就是在圆柱的上下地上各加了一个半圆形的帽子,其新生产的圆柱轴总是z轴
2.ode geom和body的关系
geom是简单的几何体
body可以代表物理场景对象
一般而言一个body总是对应于1个或者多个几何体
一个物理对象总是包含1个或者多个几何体
当然ode有函数可以检测给定几何体和物理对象的管理
对于body之间也有函数检测他们是不是相连的
3. ode关节类型
ode 具有5种类型的关节分别为
hinge,ball,slider,unversal(万向轮)以及hinge2
hinge是常见的合页那种关节形式
ball类型于游戏摇杆
slider:插销形式
hinge2则是带有轴的关节
其中大多数关节都具有内置的马达而球-涡球则不具有
Mos t joints have motors built in.Ball and sockets do not
3.弹簧-阻尼系统
2种解决方式
1.简单的:使用erp和cfm
2.复杂点的:使用物理方程式
1.erp模式:施加力保持关节附着物理不偏离
2.cfm模式-constraint force mixing
胡克定律:非k*(ra-a);
带阻尼的形式: f = k*(ra-a)-d*da
4.如何保持ode模拟的平稳性
1.僵硬的弹簧不可取
2.严格的束缚条件
3....
5.如果保持ode模拟更快
1.使用较少的关节
2.使用简单的替代物替换多重关节
3.使用较少的接触面
4.如果可能使用无摩擦或者粘性接触面替换库伦摩擦接触面
6.ode质量函数类..
清空质量
void dMassSetZero (dMass *);
void dMassSetSphere (dMass *, dReal density, dReal radius);
void dMassSetSphereTotal (dMass *, dReal total_mass, dReal radius);
void dMassSetCappedCylinder (dMass *, dReal density, int direction,dReal radius, dReal length);
void dMassSetCappedCylinderTotal (dMass *, dReal total_mass,int direction, dReal radius, dReal length);
void dMassSetCylinder (dMass *, dReal density, int direction,dReal radius, dReal length);
void dMassSetCylinderTotal (dMass *, dReal total_mass, int direction,dReal radius, dReal length);
void dMassSetBox (dMass *, dReal density,dReal lx, dReal ly, dReal lz);
void dMassSetBoxTotal (dMass *, dReal total_mass,dReal lx, dReal ly, dReal lz);
void dMassAdjust (dMass *, dReal newmass);
void dMassTranslate (dMass *, dReal x, dReal y, dReal z);
void dMassRotate (dMass *, const dMatrix3 R);
void dMassAdd (dMass *a, const dMass *b);