ワールドとはBodyとJointを格納する入れ物であり、動力学演算の対象を含む空間です。
dWorldID dWorldCreate( void );
ワールドを破棄すると、そこに格納されるすべてボディと、ジョイント グループに含まれないすべてのジョイントも同時に破棄されます。
void dWorldDestroy ( dWorldID world );
void dWorldSetGravity (
dWorldID,
dReal x,
dReal y,
dReal z
);
void dWorldGetGravity (
dWorldID,
dVector3 gravity
);
地球の重力と同一に設定するには、
dWorldSetGravity( worldID, 0, 0, -9.81 );
のようにします。
グローバルなERPを設定、取得します。
void dWorldSetERP ( dWorldID, dReal erp );
dReal dWorldGetERP ( dWorldID );
グローバルなCFMを設定、取得します。
void dWorldSetCFM ( dWorldID, dReal cfm );
dReal dWorldGetCFM ( dWorldID );
ボディの自動無効化の既定値を設定します。
| 種類 | 型 | 関数 | 既定値 |
|---|---|---|---|
| 自動無効化の有効/無効 (Flag) |
int | dWorldSetAutoDisableFlag | disable(0) |
| dWorldGetAutoDisableFlag | |||
| 速度のしきい値 (LinearThreshold) |
dReal | dWorldSetAutoDisableLinearThreshold | 0.01 |
| dWorldGetAutoDisableLinearThreshold | |||
| 角速度のしきい値 (AngularThreshold) |
dReal | dWorldSetAutoDisableAngularThreshold | 0.01 |
| dWorldGetAutoDisableAngularThreshold | |||
| (LinearAverageThreshold) | dReal | dWorldSetAutoDisableLinearAverageThreshold | 0.01 |
| dWorldGetAutoDisableLinearAverageThreshold | |||
| (AngularAverageThreshold) | dReal | dWorldSetAutoDisableAngularAverageThreshold | 0.01 |
| dWorldGetAutoDisableAngularAverageThreshold | |||
| (AverageSamplesCount) | int | dWorldSetAutoDisableAverageSamplesCount | 1 |
| dWorldGetAutoDisableAverageSamplesCount | |||
| ステップ数 (Steps) |
int | dWorldSetAutoDisableSteps | 10 |
| dWorldGetAutoDisableSteps | |||
| アイドル時間 (Time) |
dReal | dWorldSetAutoDisableTime | 0 |
| dWorldGetAutoDisableTime |
void dWorldStep ( dWorldID, dReal stepsize );
void dWorldQuickStep ( dWorldID w, dReal stepsize );
QuickStepのくり返し (iteration) 数を増加させることで、演算の精度を上げることができます。しかし逆に速度は低下します。これの既定値は20です。
void dWorldSetQuickStepNumIterations ( dWorldID, int num );
int dWorldGetQuickStepNumIterations ( dWorldID );
| 種類 | 型 | 関数 |
|---|---|---|
| DepthSF1 | int | dWorldSetAutoEnableDepthSF1 |
| dWorldGetAutoEnableDepthSF1 |
減衰には2つの機能があります。シミュレーションの不安定さを減少させることと、ボディがアイドル状態となることを可能とすることです。
これはボディに対して作用し、ここでの設定がボディの減衰の既定値となります。
| 種類 | 既定 | 最小 | 最大 | 関数 | ||
|---|---|---|---|---|---|---|
| 減衰率 | 速度 (LinearDamping) |
0 | 0 | 1 | 取得 | dWorldGetLinearDamping |
| 設定 | dWorldSetLinearDamping | |||||
| 角速度 (AngularDamping) |
0 | 0 | 1 | 取得 | dWorldGetAngularDamping | |
| 設定 | dWorldSetAngularDamping | |||||
| しきい値 | 速度 (LinearDampingThreshold) |
0.01 | 取得 | dWorldGetLinearDampingThreshold | ||
| 設定 | dWorldSetLinearDampingThreshold | |||||
| 角速度 (AngularDampingThreshold) |
0.01 | 取得 | dWorldGetAngularDampingThreshold | |||
| 設定 | dWorldSetAngularDampingThreshold |
減衰率に0を設定することで、減衰を無効とできます。
dReal dWorldGetLinearDamping( dWorldID w );
void dWorldSetLinearDamping( dWorldID w, dReal scale );
dReal dWorldGetAngularDamping( dWorldID w );
void dWorldSetAngularDamping( dWorldID w, dReal scale );
void dWorldSetDamping(
dWorldID w,
dReal linear_scale, // 速度
dReal angular_scale // 角速度
);
しきい値を超えている間のみ、減衰は有効となります。
dReal dWorldGetLinearDampingThreshold( dWorldID w );
void dWorldSetLinearDampingThreshold( dWorldID w, dReal threshold );
dReal dWorldGetAngularDampingThreshold( dWorldID w );
void dWorldSetAngularDampingThreshold( dWorldID w, dReal threshold );
以下のパラメータを設定することで、接触時に発生する問題を修正できます。
この値を設定することで、接触時に深くめり込んだオブジェクトが大きくはじけることを防ぐことができます。既定値はdInfinityです。
dReal dWorldGetContactMaxCorrectingVel ( dWorldID );
void dWorldSetContactMaxCorrectingVel ( dWorldID, dReal vel );

オブジェクトがはじける様子
※このような現象は、シミュレーションのステップサイズが過大である場合にも発生します。
すべてのジオメトリの表面層の厚さを設定します。接触が発生したときには、最大でこの厚さまでめり込むことになります。
これに小さな値を設定することで、接触がくり返し発生することによる振動 (Jitter) を抑えることができます。
dReal dWorldGetContactSurfaceLayer ( dWorldID );
void dWorldSetContactSurfaceLayer ( dWorldID, dReal depth );
ここで設定した値が、新規に作成するボディの最大角速度の既定値となります。
dReal dWorldGetMaxAngularSpeed( dWorldID w );
void dWorldSetMaxAngularSpeed( dWorldID w, dReal max_speed );
ワールドの状態を出力します。出力先は、引数のfileで指定します。
void dWorldExportDIF ( dWorldID w, FILE *file, const char *world_name );Export functions - Manual: Support Functions - ODE Wiki