OROCHI
 
Loading...
Searching...
No Matches
GxUnitChainModel.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_UTILITY_NAMESPACE_BEGIN()
14//===========================================================================
16//===========================================================================
18{
19 //-----------------------------------------------------------
21 //-----------------------------------------------------------
23public:
24 // RTTI宣言
25 GX_RTTI_CLASS_NAME(GxUnitChainModel, GxUnitChainBase, "モデル基準鎖")
26 // ClassBaseReference継承クラス用禁止宣言
28
29
30 enum class UCM_UPDATESTATE
31 {
32 RESET_TO_SIMULATION,
33 SIMULATION,
34 INTERPOLATION_TO_MOTION,
35 MOTION,
36 };
37
39
43 {
44 //-----------------------------------------------------------
46 //-----------------------------------------------------------
48
49 // RTTI宣言
51
53 //-----------------------------------------------------------
55 //-----------------------------------------------------------
57
60 _quaternionOld(GxQuaternion::IDENTITY),
61 _jointIndex(-1),
62 _radius(0.0f),
63 _twistLimit(PI),
64 _isHitBack(false),
65 _twist(GxQuaternion::IDENTITY),
66 _angleLimit(PI),
67 _baseRatio(0.0f),
68 _windRatio(GxVector3::ONE)
69 {}
70
72 //-----------------------------------------------------------
74 //-----------------------------------------------------------
76
79 f32 _radius;
89
91 };
92
94 //-----------------------------------------------------------
96 //-----------------------------------------------------------
98
100 GxUnitChainModel(void);
101
104
106 void cleanup(void) override;
107
109 //-----------------------------------------------------------
111 //-----------------------------------------------------------
113
115 void kill(void) override;
116protected:
118 b32 setup(void) override;
120 void postAsyncUpdate(void) override;
121
122public:
124 virtual void setAdditionalData(GxResSoftbodySimulation::GxSoftbodyChainAdditionalData* pResourceAdditionalData);
125
127 GX_FORCE_INLINE b32 isMotionGravity(void) const { return _isUseMotionGravity; }
129 GX_FORCE_INLINE void setIsMotionGravity(b32 enable) { _isUseMotionGravity = enable; }
131
138 void setMotionGravity(b32 enable, f32 gravityForce, const GxVector3& gravityDirection = -GxVector3::AXIS_Y);
139
141
144 constexpr void reset(void) { _updateState = UCM_UPDATESTATE::RESET_TO_SIMULATION; }
145
147 GX_FORCE_INLINE b32 isChainSimulation(void) const { return _isChainSimulation; }
149
153 GX_FORCE_INLINE void setIsChainSimulation(b32 enable) { _isChainSimulation = enable; }
154
156
160 GX_FORCE_INLINE b32 isInterpolateToMotion(void) const { return ( UCM_UPDATESTATE::INTERPOLATION_TO_MOTION == _updateState ); }
161
163 GX_FORCE_INLINE void forceDisableChainSimulation(void) { _isChainSimulation = false; _updateState = UCM_UPDATESTATE::MOTION; }
164
166 constexpr f32 getInterpolateTime(void) const { return _interpolateTime; }
168 constexpr void setInterpolateTime(f32 time) { _interpolateTime = time; }
169
170protected:
172 virtual void resetup(void);
174 b32 interpolateToMotion(void);
175
177 virtual void updateModel(void);
179 virtual void updateInterpolateModel(void);
180
181 // 以下、手法を変えるときのみオーバーライド
182
184 b32 isWarp(void) override;
186 void updateInitialize(void) override;
188 void interpolatePosition(f32 updateRatio, f32 updateRatioOld) override;
190 void calculateExternalForce(GxVector3& windDirect) override;
192 void calculateHitBackForce(f32 updateRatio, f32 updateRatioOld) override;
194 void updateConstraint(void) override;
196 virtual b32 analyseCollisionJoint(GxUnitSoftbodyCollision::GxHitBase* pHitBase);
198 virtual void updateCollisionAfterSimulation(void);
199
200public:
201#if GX_DEVELOP
203 void developRender(void) override;
204#endif // GX_DEVELOP
205
207 //-----------------------------------------------------------
209 //-----------------------------------------------------------
211public:
213 GX_FORCE_INLINE const GxAdditionalData* getAdditionalData(void) const { return const_cast<const GxAdditionalData *>(_pAdditionalData); }
214
216 constexpr s32 getJointIndex(u32 index) const { if(index < _pointCount) return _pAdditionalData[index]._jointIndex; else return -1; }
218 constexpr void setJointIndex(u32 index, s32 jointIndex) { _pAdditionalData[index]._jointIndex = jointIndex; }
219
221 const GxQuaternion& getOldQuaternion(u32 index) const { return _pAdditionalData[index]._quaternionOld; }
223 GX_FORCE_INLINE void setOldQuaternion(u32 index, const GxQuaternion& quaternion) { _pAdditionalData[index]._quaternionOld = quaternion; }
224
226 constexpr f32 getRadius(u32 index) const { if( index < _pointCount ) return _pAdditionalData[index]._radius; else return 0.0f; }
228 constexpr void setRadius(u32 index, f32 radius) { _pAdditionalData[index]._radius = radius; }
229
231 const GxQuaternion& getTwist(u32 index) const { return _pAdditionalData[index]._twist; }
233 GX_FORCE_INLINE void setTwist(u32 index, const GxQuaternion& twist) { _pAdditionalData[index]._twist = twist; }
234
236 constexpr f32 getTwistLimit(u32 index) const { return _pAdditionalData[index]._twistLimit; }
238 constexpr void setTwistLimit(u32 index, f32 limit) { _pAdditionalData[index]._twistLimit = limit; }
239
241 GX_FORCE_INLINE const GxVector3& getNormal(u32 index) const { return _pAdditionalData[index]._normal; }
243 GX_FORCE_INLINE void setNormal(u32 index, const GxVector3& normal) { _pAdditionalData[index]._normal = normal; }
244
246 GX_FORCE_INLINE const GxVector3& getHitBackDir(u32 index) const { return _pAdditionalData[index]._hitBackDirect; }
248 GX_FORCE_INLINE void setHitBackDir(u32 index, const GxVector3& dir) { _pAdditionalData[index]._hitBackDirect = dir; }
249
251 GX_FORCE_INLINE b32 isHitBack(u32 index) const { return _pAdditionalData[index]._isHitBack; }
253 GX_FORCE_INLINE void setIsHitBack(u32 index, b32 isHitBack) { _pAdditionalData[index]._isHitBack = isHitBack; }
254
256 constexpr f32 getAngleLimit(u32 index) const { return _pAdditionalData[index]._angleLimit; }
258 constexpr void setAngleLimit(u32 index, f32 limit) { _pAdditionalData[index]._angleLimit = limit; }
259
261 GX_FORCE_INLINE const GxVector3& getAngleAxis(u32 index) const { return _pAdditionalData[index]._angleAxis; }
263 GX_FORCE_INLINE void setAngleAxis(u32 index, const GxVector3& axis) { _pAdditionalData[index]._angleAxis = axis; }
264
266 constexpr f32 getBaseRatio(u32 index) const { return _pAdditionalData[index]._baseRatio; }
268 constexpr void setBaseRatio(u32 index, f32 baseRatio) { _pAdditionalData[index]._baseRatio = baseRatio; }
269
271 GX_FORCE_INLINE GxVector3 getWindRatio(u32 index) const { return _pAdditionalData[index]._windRatio; }
273 GX_FORCE_INLINE void setWindRatio(u32 index, GxVector3& windRatio) { _pAdditionalData[index]._windRatio = windRatio; }
274
276 constexpr u32 getID(void) const { return _id; }
278 constexpr u32 getPointCount(void) const { return _pointCount; }
279
280#if GX_DEVELOP
282 GX_FORCE_INLINE void setSelectMassPointIndex(u32 index){ _selectJointIndex = GxMath::getMin<u32>(_pointCount - 1, index); }
284 constexpr void getSelectJointIndex(void* const pValue) { *static_cast<u32*>(pValue) = _selectJointIndex; }
286 GX_FORCE_INLINE void setSelectJointIndex(const void* const pValue){ _selectJointIndex = GxMath::getMin<u32>(_pointCount - 1, *static_cast<u32*>(const_cast<void*>(pValue))); }
288 GX_FORCE_INLINE b32 isForceDevelopRneder(void) const { return _isForceDevelopRneder; }
290 GX_FORCE_INLINE void setForceDevelopRneder(b32 enable) { _isForceDevelopRneder = enable; }
291#endif // GX_DEVELOP
292
294 //-----------------------------------------------------------
296 //-----------------------------------------------------------
298protected:
301
304
310
312
315
316#if GX_DEVELOP
317 u32 _selectJointIndex;
318 b32 _isForceDevelopRneder;
319#endif // GX_DEVELOP
320
322};
323
324GX_UTILITY_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
@ MOTION
モーション
@ IDENTITY
基礎値で初期化
static GX_FORCE_INLINE T getMin(const T value0, const T value1)
小さいほうを取得
Definition GxMath.h:172
鎖用追加データ(質点個別データ)
Definition GxResSoftbodySimulation.h:322
鎖データクラス
Definition GxResSoftbodySimulation.h:137
鎖基底ユニット
Definition GxUnitChainBase.h:18
モデルベース鎖クラス
Definition GxUnitChainModel.h:18
GX_FORCE_INLINE b32 isMotionGravity(void) const
重力を修正してモーションへ収束させる判定
Definition GxUnitChainModel.h:127
constexpr s32 getJointIndex(u32 index) const
モデル関節番号取得
Definition GxUnitChainModel.h:216
GX_FORCE_INLINE const GxVector3 & getAngleAxis(u32 index) const
回転角度基準軸取得
Definition GxUnitChainModel.h:261
constexpr void setAngleLimit(u32 index, f32 limit)
回転限界角度設定
Definition GxUnitChainModel.h:258
constexpr void setInterpolateTime(f32 time)
補間時間の設定(シミュレーション→モーションの補間にかける時間)
Definition GxUnitChainModel.h:168
const GxQuaternion & getOldQuaternion(u32 index) const
モーションへの補間のためのクォータニオンを取得
Definition GxUnitChainModel.h:221
constexpr u32 getID(void) const
ID取得
Definition GxUnitChainModel.h:276
b32 _isUpdateAllMatrix
UpdateWorldMatrix をするかフラグ
Definition GxUnitChainModel.h:309
GX_FORCE_INLINE b32 isInterpolateToMotion(void) const
シミュレーションからモーションへ補間している状態かどうか判定
Definition GxUnitChainModel.h:160
GX_FORCE_INLINE const GxAdditionalData * getAdditionalData(void) const
モデル基準鎖追加情報取得
Definition GxUnitChainModel.h:213
constexpr f32 getInterpolateTime(void) const
補間時間の取得(シミュレーション→モーションの補間にかける時間)
Definition GxUnitChainModel.h:166
constexpr f32 getTwistLimit(u32 index) const
ねじれ回転限界角度取得
Definition GxUnitChainModel.h:236
constexpr u32 getPointCount(void) const
質点数を取得
Definition GxUnitChainModel.h:278
constexpr f32 getAngleLimit(u32 index) const
回転限界角度取得
Definition GxUnitChainModel.h:256
f32 _interpolateInnerTime
補間時間 ( 0.0f < t < 1.0f )
Definition GxUnitChainModel.h:308
GX_FORCE_INLINE const GxVector3 & getHitBackDir(u32 index) const
ねじれ計算用当たり方向取得
Definition GxUnitChainModel.h:246
GX_FORCE_INLINE void setNormal(u32 index, const GxVector3 &normal)
追加情報による入力法線設定
Definition GxUnitChainModel.h:243
GX_FORCE_INLINE GxVector3 getWindRatio(u32 index) const
風を受ける割合を取得
Definition GxUnitChainModel.h:271
GX_FORCE_INLINE void setIsMotionGravity(b32 enable)
重力を修正してモーションへ収束させる設定
Definition GxUnitChainModel.h:129
GX_FORCE_INLINE void forceDisableChainSimulation(void)
シミュレーションを強制終了してモーションへ(補間しない)
Definition GxUnitChainModel.h:163
b32 _isUseMotionGravity
モーションへ収束するために重力方向を修正するかフラグ
Definition GxUnitChainModel.h:300
b32 _isChainSimulation
クロスシミュレーションするかフラグ
Definition GxUnitChainModel.h:305
b32 _isUseAdditionalData
追加データの有無フラグ
Definition GxUnitChainModel.h:299
GX_FORCE_INLINE void setAngleAxis(u32 index, const GxVector3 &axis)
回転角度基準軸設定
Definition GxUnitChainModel.h:263
UCM_UPDATESTATE _updateState
モデルの更新とモーションの切り替え状態
Definition GxUnitChainModel.h:306
const GxQuaternion & getTwist(u32 index) const
ねじれ回転取得
Definition GxUnitChainModel.h:231
GX_FORCE_INLINE b32 isHitBack(u32 index) const
参照しているコリジョンに当たったか判定
Definition GxUnitChainModel.h:251
GxVector3 _tailOffsetLocal
末端関節のオフセット ( Local Coodinate )
Definition GxUnitChainModel.h:313
GX_FORCE_INLINE void setIsHitBack(u32 index, b32 isHitBack)
参照しているコリジョンに当たったか設定
Definition GxUnitChainModel.h:253
GX_FORCE_INLINE void setTwist(u32 index, const GxQuaternion &twist)
ねじれ回転設定
Definition GxUnitChainModel.h:233
constexpr void setRadius(u32 index, f32 radius)
各質点の当たり半径を設定
Definition GxUnitChainModel.h:228
GX_FORCE_INLINE void setHitBackDir(u32 index, const GxVector3 &dir)
ねじれ計算用当たり方向設定
Definition GxUnitChainModel.h:248
GX_FORCE_INLINE const GxVector3 & getNormal(u32 index) const
追加情報による入力法線取得
Definition GxUnitChainModel.h:241
constexpr f32 getRadius(u32 index) const
各質点の当たり半径を取得
Definition GxUnitChainModel.h:226
constexpr f32 getBaseRatio(u32 index) const
基姿勢の割合を取得
Definition GxUnitChainModel.h:266
constexpr void reset(void)
外から呼べるリセット
Definition GxUnitChainModel.h:144
f32 _twistInterpolateSpeed
ねじれ補間速度 ( 0.0f < t < 1.0f )
Definition GxUnitChainModel.h:311
GxAdditionalData * _pAdditionalData
追加データ
Definition GxUnitChainModel.h:302
GX_FORCE_INLINE void setIsChainSimulation(b32 enable)
有効設定(シミュレーションとモーションを補間して遷移)
Definition GxUnitChainModel.h:153
constexpr void setBaseRatio(u32 index, f32 baseRatio)
基姿勢の割合を設定
Definition GxUnitChainModel.h:268
GX_FORCE_INLINE b32 isChainSimulation(void) const
有効判定
Definition GxUnitChainModel.h:147
GX_FORCE_INLINE void setWindRatio(u32 index, GxVector3 &windRatio)
風を受ける割合を設定
Definition GxUnitChainModel.h:273
UCM_UPDATESTATE
状態遷移管理
Definition GxUnitChainModel.h:31
GX_FORCE_INLINE void setOldQuaternion(u32 index, const GxQuaternion &quaternion)
モーションへの補間のためのクォータニオンを設定
Definition GxUnitChainModel.h:223
GxUnitModelBase * _pParentModel
変更するモデル
Definition GxUnitChainModel.h:303
constexpr void setTwistLimit(u32 index, f32 limit)
ねじれ回転限界角度設定
Definition GxUnitChainModel.h:238
f32 _interpolateTime
補間にかける時間
Definition GxUnitChainModel.h:307
constexpr void setJointIndex(u32 index, s32 jointIndex)
モデル関節番号設定
Definition GxUnitChainModel.h:218
GxVector3 _tailOffsetWorld
末端関節のオフセット ( World Coodinate )
Definition GxUnitChainModel.h:314
モデル基礎クラス
Definition GxUnitModelBase.h:19
クロスシミュレーション用コリジョンクラス : 基礎形状クラス
Definition GxUnitSoftbodyCollision.h:124
クォータニオン
Definition GxQuaternion.h:19
Definition GxBase.h:24
モデル基準鎖用追加情報クラス
Definition GxUnitChainModel.h:43
GxVector3 _windRatio
風を受ける割合
Definition GxUnitChainModel.h:88
f32 _angleLimit
回転限界角度
Definition GxUnitChainModel.h:86
GxVector3 _hitBackDirect
ねじれ計算用当たり方向
Definition GxUnitChainModel.h:83
f32 _radius
質点の当たり半径 // 一応ココでも保持
Definition GxUnitChainModel.h:79
s32 _jointIndex
準じるモデル関節の番号
Definition GxUnitChainModel.h:78
f32 _baseRatio
基姿勢の割合
Definition GxUnitChainModel.h:87
GxQuaternion _twist
ねじれ回転、前フレームの値を保持
Definition GxUnitChainModel.h:84
b32 _isHitBack
参照しているコリジョンにあたったかどうか
Definition GxUnitChainModel.h:81
GxVector3 _angleAxis
回転角度基準軸
Definition GxUnitChainModel.h:85
GxVector3 _normal
ねじれ計算用法線
Definition GxUnitChainModel.h:82
GxAdditionalData(void)
デフォルトコンストラクタ
Definition GxUnitChainModel.h:59
f32 _twistLimit
ねじれ最大角度
Definition GxUnitChainModel.h:80
GxQuaternion _quaternionOld
補間用
Definition GxUnitChainModel.h:77
3次元ベクトル
Definition GxVector.h:245
static const GxVector3 AXIS_Y
(0, 1, 0)
Definition GxVector.h:262
32bitブーリアン
Definition GxDefine.h:173