物理演算を設定するまでの流れ a. インスタンスの作成
b. 物理演算の設定
c. モデルに適用
1-a. インスタンスの作成設定したい部位一つに対してインスタンスを一つ用意します。 PhysicsHair physicsHairFront = new PhysicsHair(); // 前髪用
PhysicsHair physicsHairSide = new PhysicsHair(); // 横髪用
PhysicsHair physicsHairBack = new PhysicsHair(); // 後ろ髪用
aで作成したインスタンスに物理演算の設定をしていきます。
ここでは物理演算を設定するものが、どのようなものなのかを設定します。 physicsHairFront->setup (
0.17f, // 長さ : 単位はメートル 揺れの周期(早さ)に影響 0.5f, // 空気抵抗 : 0~1の値、初期値は0.5 揺れが減衰する早さに影響 0.1f ) ; // 質量 : 単位はkg
ここではどのパラメータが動いた時にどういう物理演算するのかを設定します。 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倍の影響度で垂れる
ここでは上で設定した計算をどの部位に反映させるかを設定します。 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倍の影響度で反映させる
これは毎フレーム、モデルクラスのupdate関数の前までに呼び出します。 long time = UtSystem ::getTimeMSec() - startTimeMSec; // 実行直後からの経過時間
// 物理演算をモデルに適用
physicsHairFront->update(live2DModel, time);
physicsHairBack->update(live2DModel, time);
|
|