モデル対応シミュレーション、コリジョン統合モジュールクラス More...
#include <GxModUnitSoftbody.h>
Public Member Functions | |
初期化 | |
GxModUnitSoftbody (void) | |
デフォルトコンストラクタ | |
~GxModUnitSoftbody (void) override | |
デストラクタ | |
操作 | |
virtual u32 | initialize (GxUnitModelBase *pModelSimulation, GxResSoftbodySimulation *pResourceSimulation, u32 unitProcessNumberSimulation=USBS_DEFAULT_UNIT_PROCESS_NUMBER_SIMULATION, u32 unitListNumberSimulation=USBS_DEFAULT_UNIT_LIST_NUMBER_SIMULATION, GxUnitModelBase *pModelCollision=nullptr, GxResSoftbodyCollision *pResourceCollision=nullptr, u32 unitProcessNumberCollision=USBS_DEFAULT_UNIT_PROCESS_NUMBER_SIMULATION-1, u32 unitListNumberCollision=USBS_DEFAULT_UNIT_LIST_NUMBER_SIMULATION-1, GxRtti &chainUnitRtti=GxUnitChainModel::GX_RTTI, GxRtti &clothUnitRtti=GxUnitClothModel::GX_RTTI) |
セットアップ | |
b32 | setupCollision (GxUnitModelBase *pModelCollision, GxResSoftbodyCollision *pResourceCollision, u32 unitProcessNumberCollision=USBS_DEFAULT_UNIT_PROCESS_NUMBER_SIMULATION - 1, u32 unitListNumberCollision=USBS_DEFAULT_UNIT_LIST_NUMBER_SIMULATION - 1) |
コリジョンの設定(リソースから) | |
virtual void | cleanup (void) |
ユニットの破棄 | |
void | updateLocalMatrixFromWorldMatrix (void) |
モーション(世界行列)情報をモデル情報にフィードバック | |
アクセサ | |
GX_FORCE_INLINE b32 | isSetup (void) const |
セットアップ済みか | |
constexpr u32 | getChainCount (void) const |
鎖ユニットの個数取得 | |
constexpr GxUnitChainModel * | getChainUnit (u32 index) const |
指定番号の鎖ユニット取得 | |
constexpr GxUnitChainModel * | getChainUnitFromID (u32 id) const |
指定番号の鎖ユニット取得 | |
constexpr u32 | getClothCount (void) const |
布ユニットの個数取得 | |
constexpr GxUnitClothModel * | getClothUnit (u32 index) const |
指定番号の布ユニット取得 | |
constexpr GxUnitClothModel * | getClothUnitFromID (u32 id) const |
指定番号の布ユニット取得 | |
GX_FORCE_INLINE b32 | isSimulation (void) const |
有効判定 | |
GX_FORCE_INLINE void | setIsSimulation (b32 enable) |
有効/無効の設定 | |
GX_FORCE_INLINE b32 | isInterpolateToMotion (void) const |
シミュレーションからモーションへ補間している状態か判定 | |
constexpr void | forceDisableSimulation (void) |
シミュレーションを強制終了してモーションへ(補間しない) | |
constexpr f32 | getInterpolateTime (void) const |
補間時間の取得(シミュレーション→モーションの補間にかける時間) | |
constexpr void | setInterpolateTime (f32 time) |
補間時間の設定(シミュレーション→モーションの補間にかける時間) | |
GX_FORCE_INLINE b32 | isMotionGravity (void) const |
重力を修正してモーションへ収束させているか判定 | |
GX_FORCE_INLINE void | setIsMotionGravity (b32 enable) |
重力を修正してモーションへ収束させるか設定 | |
GX_FORCE_INLINE void | setMotionGravity (b32 enable, f32 gravityForce, const GxVector3 &gravityDirection=-GxVector3::AXIS_Y) |
重力を修正してモーションへ収束させるか設定 - パラメータ変更込み | |
GX_FORCE_INLINE b32 | isUpdateAllMatrix (void) const |
すべての行列を更新するフラグ判定 | |
GX_FORCE_INLINE void | setIsUpdateAllMatrix (b32 is) |
すべての行列を更新するフラグ設定 | |
GX_FORCE_INLINE GxVector3 | getGravity (void) const |
重力取得 | |
GX_FORCE_INLINE void | setGravity (const GxVector3 &gravity) |
重力設定 | |
constexpr f32 | getGravityForce (void) const |
重力取得(大きさのみ) | |
constexpr void | setGravityForce (f32 force) |
重力設定(大きさのみ) | |
GX_FORCE_INLINE const GxVector3 & | getGravityDirection (void) const |
重力取得(方向のみ) | |
GX_FORCE_INLINE void | setGravityDirection (const GxVector3 &direction) |
重力設定(方向のみ) | |
GX_FORCE_INLINE GxVector3 | getWind (void) const |
風取得 | |
GX_FORCE_INLINE void | setWind (const GxVector3 &wind) |
風設定 | |
constexpr f32 | getWindForce (void) const |
風力取得 | |
constexpr void | setWindForce (f32 force) |
風力設定 | |
GX_FORCE_INLINE const GxVector3 & | getWindDirection (void) const |
風向取得 | |
GX_FORCE_INLINE void | setWindDirection (const GxVector3 &direction) |
風向設定 | |
constexpr GxUnitSoftbodyCollision * | getCollisionFromSimulation (void) const |
コリジョンの取得 | |
GX_FORCE_INLINE void | setCollisionToSimulation (GxUnitSoftbodyCollision *pCollision) |
コリジョンの設定 | |
constexpr GxUnitSoftbodyCollision * | getCollision (void) const |
コリジョンの取得 | |
GX_FORCE_INLINE void | setCollision (GxUnitSoftbodyCollision *pCollision) |
コリジョンの設定 | |
![]() | |
GxModUnitBase (void) | |
デフォルトコンストラクタ | |
~GxModUnitBase (void) override | |
デストラクタ | |
![]() | |
GxModBase (void) | |
デフォルトコンストラクタ | |
virtual | ~GxModBase (void) |
デストラクタ | |
![]() | |
constexpr | GxClassBase (void) |
コンストラクタ | |
constexpr | GxClassBase (const GxClassBase &base) |
コピーコンストラクタ | |
~GxClassBase (void) override | |
デストラクタ | |
![]() | |
constexpr | GxClassBaseRoot (void) |
コンストラクタ | |
constexpr | GxClassBaseRoot (const GxClassBaseRoot &) |
コピーコンストラクタ | |
virtual | ~GxClassBaseRoot (void) |
デストラクタ | |
constexpr GxClassBaseRoot & | operator= (const GxClassBaseRoot &) |
代入演算子 | |
virtual GxRtti & | getRtti (void) const =0 |
Rttiの取得 | |
virtual GX_FORCE_INLINE const GxTypedObject * | getDefaultObject (void) |
デフォルトオブジェクトを取得 | |
GX_FORCE_INLINE b32 | isDefaultObject (void) |
デフォルトオブジェクト判定 | |
Protected Attributes | |
メンバ変数 | |
b32 | _isSetup |
セットアップ済みフラグ | |
GxUnitModelBase * | _pParentModelSimulation |
シミュレートするモデル | |
GxUnitModelBase * | _pParentModelCollision |
コリジョン付与するモデル | |
GxUnitSoftbodySimulation * | _pUnitSimulation |
シミュレーションユニット | |
GxUnitSoftbodyCollision * | _pUnitCollision |
コリジョンユニット | |
Additional Inherited Members | |
![]() | |
static GX_FORCE_INLINE GxRtti & | __getStaticRtti (void) |
Rttiの取得 | |
![]() | |
virtual GX_FORCE_INLINE b32 | setup (void) |
セットアップ(preAsyncUpdate前に初回のみ実行される) | |
virtual GX_FORCE_INLINE void | preAsyncUpdate (void) |
並列更新(asyncUpdateの前に実行される) | |
virtual GX_FORCE_INLINE void | asyncUpdate (void) |
並列更新 | |
virtual GX_FORCE_INLINE void | postAsyncUpdate (void) |
並列更新(asyncUpdateの後に実行される) | |
virtual GX_FORCE_INLINE void | sequentialUpdate (void) |
逐次更新 | |
virtual GX_FORCE_INLINE void | forceAsyncUpdate (void) |
強制並列更新(pause中も実行) | |
virtual GX_FORCE_INLINE void | render (void) |
描画 | |
virtual GX_FORCE_INLINE b32 | setRenderMaterial (GxRenderMaterial *) |
マテリアルの描画設定 | |
GX_FORCE_INLINE GxUnitBase * | getOwner (void) const |
所持者を取得 | |
GX_FORCE_INLINE GxFlag32Index< UPDATE_TYPE > | getUpdateEnable (void) const |
更新を呼ぶかを取得 | |
GX_FORCE_INLINE void | setUpdateEnable (UPDATE_TYPE updateType, b32 enable) |
更新を呼ぶかを設定 | |
![]() | |
constexpr GxClassBaseRoot * | getOwner (void) const |
所持者を取得 | |
virtual GX_FORCE_INLINE void | setOwner (GxClassBaseRoot *pOwner) |
所持者を設定 | |
![]() | |
static const GxRtti & | getOwnerDerivedRtti (void) |
所持者に必要な継承RTTIを取得 | |
モデル対応シミュレーション、コリジョン統合モジュールクラス
|
inlineconstexpr |
コリジョンの取得
所有しているコリジョンユニットを取得する
|
inlineconstexpr |
コリジョンの取得
所有しているシミュレーションユニットに登録されているコリジョンユニットを取得する
|
virtual |
セットアップ
pModelSimulation | [in] シミュレートするモデル |
pResourceSimulation | [in] シミュレート設定リソース |
unitProcessNumberSimulation | [in] シミュレートユニットの処理ライン |
unitListNumberSimulation | [in] シミュレートユニットのリストライン |
pModelCollision | [in] コリジョンをつけるモデル(nullptrならシミュレーションと同じものを) |
pResourceCollision | [in] コリジョン設定リソース(nullptrならコリジョンはなし) |
unitProcessNumberCollision | [in] コリジョンユニットの処理ライン |
unitListNumberCollision | [in] コリジョンユニットのリストライン |
chainUnitRtti | [in] チェインユニットのRTTI |
clothUnitRtti | [in] クロスユニットのRTTI |
|
inline |
コリジョンの設定
所有しているコリジョンユニットを破棄し、新規に設定する
|
inline |
コリジョンの設定
所有しているシミュレーションユニットにコリジョンユニットを登録する
その後、所有しているコリジョンユニットは破棄し、新しく与えられたポインタを保持する
|
inline |
有効/無効の設定
正確には、モーションからシミュレーションに切り替わる際は、モーションの姿勢を初期値とするため補間はない
シミュレーションからモーションへ切り替える場合のみ現在の姿勢からモーションの姿勢まで回転を時間線形に球面補間する
|
inline |
すべての行列を更新するフラグ設定
枝分かれしているシミュレーション関節があると、 枝分かれ先の行列がシミュレーションにあわせて更新されないため正常な姿勢をとらない
したがって、この関数を posAsyncUpdate ( シミュレーションの更新 ) より後ろで呼ぶことで、枝分かれを含むすべての行列を更新する
|
inline |
重力を修正してモーションへ収束させるか設定 - パラメータ変更込み
setMotionGravity の第一引数に true を与えると、重力方向は設定パラメータに因らず、 モデル関節のモーションで指定された方向へ重力を向ける
大きさは第二引数で与えられた値を用いる
また、第一引数に false が与えられた場合、第三引数で鉛直方向以外の重力方向を設定可能
この方向は、すべての質点に同等の向きを与える(個別設定不可)
b32 GxModUnitSoftbody::setupCollision | ( | GxUnitModelBase * | pModelCollision, |
GxResSoftbodyCollision * | pResourceCollision, | ||
u32 | unitProcessNumberCollision = USBS_DEFAULT_UNIT_PROCESS_NUMBER_SIMULATION - 1, | ||
u32 | unitListNumberCollision = USBS_DEFAULT_UNIT_LIST_NUMBER_SIMULATION - 1 ) |
コリジョンの設定(リソースから)
pModelCollision | [in] コリジョンをつけるモデル |
pResourceCollision | [in] コリジョン設定リソース |
unitProcessNumberCollision | [in] コリジョンユニットのプロセスライン番号 |
unitListNumberCollision | [in] コリジョンユニットのユニットライン番号 |
void GxModUnitSoftbody::updateLocalMatrixFromWorldMatrix | ( | void | ) |
モーション(世界行列)情報をモデル情報にフィードバック
Gx では、モーションがモデルの世界行列しか更新しないため、 局所行列を使用しているクロスシミュレーションは正常に動作しない
したがって、この関数をモーション更新後に呼ぶことで、世界行列から局所行列へ情報をフィードバックさせる
シミュレーションするモデルはモーション更新後に必ずこの関数を呼ばなければならない