物理演算の設定

物理演算を設定するまでの流れ

1.物理演算クラス
a. インスタンスの作成
b. 物理演算の設定
c. モデルに適用


1-a. インスタンスの作成

物理演算の設定にはPhysicsHairというクラスを利用します。
設定したい部位一つに対してインスタンスを一つ用意します。
PhysicsHair physicsHairFront = new PhysicsHair(); // 前髪用
PhysicsHair physicsHairSide = new PhysicsHair(); // 横髪用
PhysicsHair physicsHairBack = new PhysicsHair(); // 後ろ髪用


1-b. 物理演算の設定

aで作成したインスタンスに物理演算の設定をしていきます。
設定は三つあります。
・物理演算を適用するものの設定
・入力の設定
・出力の設定


・物理演算を適用するものの設定
setup関数を使用して設定を行います。
ここでは物理演算を設定するものが、どのようなものなのかを設定します。
physicsHairFront->setup (
                        0.17f, // 長さ : 単位はメートル 揺れの周期(早さ)に影響
                        0.5f, // 空気抵抗 : 0~1の値、初期値は0.5 揺れが減衰する早さに影響
                        0.1f ) ; // 質量 : 単位はkg 


・入力の設定
addSrcParam関数を使用して設定します。
ここではどのパラメータが動いた時にどういう物理演算するのかを設定します。
PhysicsHair::Src srcX = PhysicsHair::Src::SRC_TO_X; // 横に揺れる
PhysicsHair::Src srcZ = PhysicsHair::Src::SRC_TO_G_ANGLE; // 垂れる

physicsHairFront->addSrcParam(srcX, "PARAM_ANGLE_X", 0.005f, 1); // "PARAM_ANGLE_X"のパラメータが動いた時に0.005倍の影響度で揺れる
physicsHairFront->addSrcParam(srcZ, "PARAM_ANGLE_Z", 0.8f, 1); // "PARAM_ANGLE_Z"のパラメータにあわせて0.8倍の影響度で垂れる


・出力の設定
addTargetParam関数を使用して設定を行います。
ここでは上で設定した計算をどの部位に反映させるかを設定します。
PhysicsHair::Target targetA = PhysicsHair::Target::TARGET_FROM_ANGLE; //

physicsHairFront->addTargetParam(targetA, "PARAM_HAIR_FRONT", 0.025f, 1); // "PARAM_HAIR_FRONT"に、0.025倍の影響度で反映させる
physicsHairBack->addTargetParam(targetA, "PARAM_HAIR_BACK", 0.025f, 1); // "PARAM_HAIR_BACK"に、0.025倍の影響度で反映させる

1-c. モデルに適用

update関数を使用してモデルに物理演算を適用します。
これは毎フレーム、モデルクラスのupdate関数の前までに呼び出します。
long time = UtSystem::getTimeMSec() - startTimeMSec; // 実行直後からの経過時間

// 物理演算をモデルに適用
physicsHairFront->update(live2DModel, time);
physicsHairBack->update(live2DModel, time);


























Comments