Springhead
An open source physics engine for virtual reality, haptics and motion generation.
2. 基本的な用語


ここでは基本的な用語について説明しています.
より詳細な説明は 使い方の説明 (Springhead Users Manual) または APIの詳細な説明 (リファレンスマニュアル) を参照して下さい.

  • 剛体
    外から力を加えたときに変形が無視できる硬い物体です.

  • ステップ幅
    ステップ幅はシミュレーションをどのくらい細かく行うかを示す値で, 小さければ小さいほど精度が良いが,計算量も増加するという関係があります. ステップ幅を大きく取った場合は単に精度が悪くなるだけではなく,場合によっては シミュレーション自体の破綻を招きます.

  • シーングラフ
    シーングラフは複数の3D物体モデルから構成されます.3D物体モデルは,形状,質量, 慣性テンソル,重心,位置,姿勢,速度などから構成されます.

  • 衝突判定
    シーングラフから渡された物体の形状や位置情報から,物体同士の衝突の有無を判定し, その結果を物理エンジンに渡します.Springhead2では,高速衝突判定アルゴリズムとして, GJKアルゴリズムを採用しています.

  • GJK(Gilbert-Johnson-Keerthi)
    GJKは2つのconvex(凸形)なオブジェクト間の最短距離を高速に導き出すアルゴリズムです. 図形のサポート写像が分かっていれば,どんな凸形物体に対しても適用することができます.

  • 物理エンジン
    衝突判定の結果を元に,物理エンジンは,物体間に働く力を計算します. 物体の位置,速度,力から,次のステップでの位置,速度を求め,シーングラフを更新します. Springhead2では,ペナルティ法で解く手法と,解析法で解く手法を用意しています.

  • 参照カウンタ

    C++では,メモリを new で確保して delete で削除します. new してない領域を指すポインタを delete したり,delete を忘れると 一般保護違反やメモリリークという問題が起き,特にメモリリークをなくすのはとても面倒です. そこで,C++に便利なポインタを導入するのが参照カウンタテンプレートクラスです. 参照カウンタとは,ポインタに指されるオブジェクトに,参照しているポインタ の数を 書いておき,0になったら自動的に削除する仕組みです. 参照ポインタ(Spr::UTRef)は, 参照するときにカウンタ値を増やし, 参照しなくなるときにカウンタ値を減らし, カウンタが0だったら delete します. 参照カウンタはUTRefCount基本クラスに定義されています. 参照ポインタはUTRefCountクラスを継承したクラスにだけ使えます.