ワールド (World)

ワールドとはBodyJointを格納する入れ物であり、動力学演算の対象を含む空間です。

ワールドの作成・破棄 (Create、Destroy)

作成

dWorldID dWorldCreate( void );

破棄

ワールドを破棄すると、そこに格納されるすべてボディと、ジョイント グループに含まれないすべてのジョイントも同時に破棄されます。

void dWorldDestroy ( dWorldID world );

重力 (Gravity)

void dWorldSetGravity (
    dWorldID,
    dReal x,
    dReal y,
    dReal z
    );
void dWorldGetGravity (
    dWorldID,
    dVector3 gravity
    );

地球の重力と同一に設定するには、

dWorldSetGravity( worldID, 0, 0, -9.81 );

のようにします。

ERP/CFM

ERP (Error Reduction Parameter)

グローバルなERPを設定、取得します。

void dWorldSetERP ( dWorldID, dReal erp );
dReal dWorldGetERP ( dWorldID );

CFM (Constraint Force Mixing)

グローバルなCFMを設定、取得します。

void dWorldSetCFM ( dWorldID, dReal cfm );
dReal dWorldGetCFM ( dWorldID );

自動有効化 / 無効化 (Automatic Enabling and Disabling)

ボディの自動無効化の既定値を設定します。

Auto Disable
種類 関数 既定値
自動無効化の有効/無効
(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

動力学演算を進める (Step)

Step

void dWorldStep ( dWorldID, dReal stepsize );

QuickStep

void dWorldQuickStep ( dWorldID w, dReal stepsize );

精度の向上

QuickStepのくり返し (iteration) 数を増加させることで、演算の精度を上げることができます。しかし逆に速度は低下します。これの既定値は20です。

void dWorldSetQuickStepNumIterations ( dWorldID, int num );
int dWorldGetQuickStepNumIterations ( dWorldID );

StepFast1

Auto Enable
種類 関数
DepthSF1 int dWorldSetAutoEnableDepthSF1
dWorldGetAutoEnableDepthSF1

減衰 (Damping)

減衰には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  // 角速度
    );

しきい値 (Threshold)

しきい値を超えている間のみ、減衰は有効となります。

速度

dReal dWorldGetLinearDampingThreshold( dWorldID w );
void dWorldSetLinearDampingThreshold( dWorldID w, dReal threshold );

角速度

dReal dWorldGetAngularDampingThreshold( dWorldID w );
void dWorldSetAngularDampingThreshold( dWorldID w, dReal threshold );

接触時の挙動

以下のパラメータを設定することで、接触時に発生する問題を修正できます。

修正速度 (correcting velocity)

この値を設定することで、接触時に深くめり込んだオブジェクトが大きくはじけることを防ぐことができます。既定値はdInfinityです。

dReal dWorldGetContactMaxCorrectingVel ( dWorldID );
void dWorldSetContactMaxCorrectingVel ( dWorldID, dReal vel );


オブジェクトがはじける様子

※このような現象は、シミュレーションのステップサイズが過大である場合にも発生します。

表面層の厚さ (the depth of the surface layer)

すべてのジオメトリの表面層の厚さを設定します。接触が発生したときには、最大でこの厚さまでめり込むことになります。

これに小さな値を設定することで、接触がくり返し発生することによる振動 (Jitter) を抑えることができます。

dReal dWorldGetContactSurfaceLayer ( dWorldID );
void dWorldSetContactSurfaceLayer ( dWorldID, dReal depth );

最大角速度 (Max Angular Speed)

ここで設定した値が、新規に作成するボディの最大角速度の既定値となります。

dReal dWorldGetMaxAngularSpeed( dWorldID w );
void dWorldSetMaxAngularSpeed( dWorldID w, dReal max_speed );

エクスポート (Export)

ワールドの状態を出力します。出力先は、引数のfileで指定します。

void dWorldExportDIF ( dWorldID w, FILE *file, const char *world_name );
Export functions - Manual: Support Functions - ODE Wiki