OROCHI
 
Loading...
Searching...
No Matches
GxUnitSoftbodyBase.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13GX_UTILITY_NAMESPACE_BEGIN()
15//===========================================================================
17//===========================================================================
19{
20 //-----------------------------------------------------------
22 //-----------------------------------------------------------
24public:
25 // RTTI宣言
26 GX_RTTI_ABSTRACT_CLASS_NAME(GxUnitSoftbodyBase, GxUnitBase, "ソフトボディ基礎")
27 // ClassBaseReference継承クラス用禁止宣言
29
30
31 static const GxVector3 _gravityDefault;
33 static const GxVector3 _gravityDirectionDefault;
35 static const f32 _gravityForceDefault;
37 static const f32 _airDampingDefault;
39 static const f32 _windForceDefault;
41 static const GxVector3 _windDirectionDefault;
43 static const f32 _massDefault;
45 static const f32 _updateDeltaDefault;
47 static const f32 _hitbackForceDamperDefault;
49 static const f32 _warpLengthSquareDefault;
50
52
56 struct GxCell : public gx::core::GxStructBase
57 {
58 //-----------------------------------------------------------
60 //-----------------------------------------------------------
62
63 // RTTI宣言
64 GX_RTTI_STRUCT(GxUnitSoftbodyBase::GxCell);
65
67 //-----------------------------------------------------------
69 //-----------------------------------------------------------
71
73 GxCell(void) :
74 _gravity(GxUnitSoftbodyBase::_gravityDefault),
75 _mass(0.0f),
76 _radius(0.0f),
77 _windRatio(GxVector3::ONE),
78 _isFixed(false)
79 {}
80
82 //-----------------------------------------------------------
84 //-----------------------------------------------------------
86
94 f32 _mass;
95 f32 _radius;
98
100 };
101
103 //-----------------------------------------------------------
105 //-----------------------------------------------------------
107protected:
109 GxUnitSoftbodyBase(void);
110
111public:
113 void cleanup(void) override;
114
116 //-----------------------------------------------------------
118 //-----------------------------------------------------------
120protected:
122 void postAsyncUpdate(void) override;
124 void render(void) override;
125
126protected:
128 virtual b32 isWarp(void) = 0;
130 virtual void updateInitialize(void) = 0;
132 virtual void updateForce(f32 updateRatio, f32 updateRatioOld) = 0;
134 virtual void updateCell(void) = 0;
136 virtual void updateConstraint(void) = 0;
138 virtual void calculateHitBackForce(f32 updateRatio, f32 updateRatioOld) = 0;
139
140#if GX_DEVELOP
142 virtual void developRender(void);
143#endif //GX_DEVELOP
144
146 //-----------------------------------------------------------
148 //-----------------------------------------------------------
150public:
152
156 virtual void* getCellPointer(void) const = 0;
157
159 constexpr GxUnitSoftbodyCollision* getCollision(void) const { return _pCollision; }
161 constexpr void setCollision(GxUnitSoftbodyCollision* pCollision) { _pCollision = pCollision; }
162
164
168 constexpr u32 getPointCount(void) const { return _pointCount; }
169
171
176 constexpr u32 getLineCount(void) const { return _lineCount; }
177
179 constexpr f32 getMass(void) const { return _mass; }
180
182 constexpr f32 getAirDamping(void) const { return _airDamping; }
184 constexpr void setAirDamping(f32 damping) { _airDamping = damping; }
185
187 constexpr f32 getWindForce(void) const { return _windForce; }
189 constexpr void setWindForce(f32 windForce) { _windForce = windForce; }
190
192 GX_FORCE_INLINE const GxVector3& getWindDirection(void) const { return _windDirection; }
194 GX_FORCE_INLINE void setWindDirection(const GxVector3& windDirection) { _windDirection = windDirection.getNormalizeEx(); }
195
197 constexpr f32 getHitBackForceDamper(void) const { return _hitBackForceDamper; }
199 constexpr void setHitBackForceDamper(f32 damper) { _hitBackForceDamper = damper; }
200
202 constexpr f32 getUpdateDelta(void) const { return _updateDelta; }
204 constexpr void setUpdateDelta(f32 delta) { _updateDelta = delta; }
205
207 constexpr u32 getMoveStrength(u32 index) const { return _moveStrength[index]; }
209
214 constexpr void setMoveStrength(u32 strength, u32 index) { _moveStrength[index] = strength; }
215
217 constexpr f32 getWarpLengthSquare(void) const { return _warpLengthSquare; }
219 constexpr void setWarpLengthSquare(f32 length) { _warpLengthSquare = length; }
220
222 GX_FORCE_INLINE const GxVector3& getWarpPosition(void) const { return _warpPosition; }
223
225 GX_FORCE_INLINE void setExtraLoop(f32 time = 1.0f) { _isExtraLoop = true; _extraLoopTime = time; }
226
228 GX_FORCE_INLINE b32 isUpdateExtraLoop(void) const { return _isExtraLoop; }
230 GX_FORCE_INLINE void setIsUpdateExtraLoop(void) { _isExtraLoop = true; }
231
233 constexpr f32 getExtraLoopTime(void) const { return _extraLoopTime; }
235 constexpr void setExtraLoopTime(f32 time) { _extraLoopTime = time; }
236
238 constexpr f32 getGravityForce(void) const { return _gravityForce; }
240 constexpr void setGravityForce(f32 force) { _gravityForce = force; }
241
243 constexpr f32 getAdjustGravityBlendRate(void) const { return _adjustGravityBlendRate; }
245 constexpr void setAdjustGravityBlendRate(f32 blandRate) { _adjustGravityBlendRate = blandRate; }
246
248 GX_FORCE_INLINE const GxVector3& getGravityDirection(void) const { return _gravityDirection; }
250 GX_FORCE_INLINE void setGravityDirection(const GxVector3& direction) { _gravityDirection = direction.getNormalizeEx(); }
251
253 GX_FORCE_INLINE const GxVector3& getAdjustGravityDirection(void) const { return _adjustGravityDirection; }
255 GX_FORCE_INLINE void setAdjustGravityDirection(const GxVector3& direction) { _adjustGravityDirection = direction.getNormalizeEx(); }
256
257#if GX_DEVELOP
259 GX_FORCE_INLINE void setVisible(b32 visible) { _isVisible = visible; }
261 GX_FORCE_INLINE void setVisibleWind(b32 visible) { _isVisibleWind = visible; }
263 GX_FORCE_INLINE void setVisibleMassPoint(b32 visible){ _isVisibleMassPoint = visible; }
265 GX_FORCE_INLINE void setSelectedDrawMassPoint(b32 selected){ _isSelectedDrawMassPoint = selected; }
266#endif // GX_DEVELOP
267
269 //-----------------------------------------------------------
271 //-----------------------------------------------------------
273protected:
277
281
282 f32 _mass;
288 u32 _moveStrength[2];
301
302#if GX_DEVELOP
303 b32 _isUpdateconstraint;
304 b32 _isVisible;
305 b32 _isVisibleWind;
306 GxVector3 _basePosition;
307 b32 _isVisibleMassPoint;
308 b32 _isSelectedDrawMassPoint;
309#endif // GX_DEVELOP
310
312};
313
314GX_UTILITY_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
ユニット基礎クラス
Definition GxUnitBase.h:45
ソフトボディユニット基底クラス
Definition GxUnitSoftbodyBase.h:19
constexpr void setCollision(GxUnitSoftbodyCollision *pCollision)
コリジョンユニット設定
Definition GxUnitSoftbodyBase.h:161
constexpr void setUpdateDelta(f32 delta)
更新間隔設定
Definition GxUnitSoftbodyBase.h:204
constexpr void setAdjustGravityBlendRate(f32 blandRate)
ローカル重力方向と補整重力方向のブレンド率を設定
Definition GxUnitSoftbodyBase.h:245
u32 _pointCount
点の数
Definition GxUnitSoftbodyBase.h:278
constexpr f32 getAdjustGravityBlendRate(void) const
ローカル重力方向と補整重力方向のブレンド率を取得
Definition GxUnitSoftbodyBase.h:243
f32 _mass
全体重さ
Definition GxUnitSoftbodyBase.h:282
GX_FORCE_INLINE const GxVector3 & getWarpPosition(void) const
瞬間移動検出参照位置取得 : 自動更新、変更禁止
Definition GxUnitSoftbodyBase.h:222
virtual void updateForce(f32 updateRatio, f32 updateRatioOld)=0
各質点にかかる力の算出
constexpr f32 getUpdateDelta(void) const
更新間隔取得
Definition GxUnitSoftbodyBase.h:202
constexpr f32 getWindForce(void) const
風力取得
Definition GxUnitSoftbodyBase.h:187
GX_FORCE_INLINE void setGravityDirection(const GxVector3 &direction)
ローカル重力方向設定
Definition GxUnitSoftbodyBase.h:250
virtual b32 isWarp(void)=0
ワープの条件を記述、true が返るフレームではシミュレーションしない
f32 _warpLengthSquare
ワープとみなす閾値(長さの二乗値
Definition GxUnitSoftbodyBase.h:291
GX_FORCE_INLINE const GxVector3 & getGravityDirection(void) const
ローカル重力方向取得
Definition GxUnitSoftbodyBase.h:248
b32 _isExtraLoop
このフラグがオンのフレームは安定動作のために空ループする
Definition GxUnitSoftbodyBase.h:292
GX_FORCE_INLINE void setAdjustGravityDirection(const GxVector3 &direction)
補整重力方向設定
Definition GxUnitSoftbodyBase.h:255
GxUnitSoftbodyCollision * _pCollisionOld
1フレーム前のコリジョンデータ
Definition GxUnitSoftbodyBase.h:275
constexpr f32 getExtraLoopTime(void) const
空ループする時間を取得 [ sec ]
Definition GxUnitSoftbodyBase.h:233
virtual void updateConstraint(void)=0
制約を更新
b32 _isLocalWind
風向きを親ユニットのローカルで扱うかフラグ
Definition GxUnitSoftbodyBase.h:299
constexpr f32 getMass(void) const
質量取得 : 途中変更無効
Definition GxUnitSoftbodyBase.h:179
virtual void updateInitialize(void)=0
毎フレーム初期化
constexpr f32 getWarpLengthSquare(void) const
瞬間移動検出距離(の二乗)取得
Definition GxUnitSoftbodyBase.h:217
constexpr f32 getGravityForce(void) const
重力取得
Definition GxUnitSoftbodyBase.h:238
GxVector3 _gravityDirection
ローカル重力方向
Definition GxUnitSoftbodyBase.h:295
constexpr u32 getLineCount(void) const
シミュレート線数の取得
Definition GxUnitSoftbodyBase.h:176
virtual void * getCellPointer(void) const =0
質点データ取得
constexpr void setWarpLengthSquare(f32 length)
瞬間移動検出距離(の二乗)設定
Definition GxUnitSoftbodyBase.h:219
f32 _updateDelta
1 シミュレート時間
Definition GxUnitSoftbodyBase.h:287
constexpr u32 getPointCount(void) const
シミュレート点数の取得
Definition GxUnitSoftbodyBase.h:168
GxVector3 _warpPosition
ワープを検出するときの位置
Definition GxUnitSoftbodyBase.h:290
constexpr void setWindForce(f32 windForce)
風力設定
Definition GxUnitSoftbodyBase.h:189
constexpr GxUnitSoftbodyCollision * getCollision(void) const
コリジョンユニット取得
Definition GxUnitSoftbodyBase.h:159
virtual void calculateHitBackForce(f32 updateRatio, f32 updateRatioOld)=0
ヒットバックを更新
constexpr void setGravityForce(f32 force)
重力設定
Definition GxUnitSoftbodyBase.h:240
u32 _planeCount
面の数 // 三次元拡張時
Definition GxUnitSoftbodyBase.h:280
GX_FORCE_INLINE const GxVector3 & getAdjustGravityDirection(void) const
補整重力方向取得
Definition GxUnitSoftbodyBase.h:253
constexpr void setMoveStrength(u32 strength, u32 index)
平行移動伝播率の設定 [ 0 ~ 100 ]
Definition GxUnitSoftbodyBase.h:214
virtual void updateCell(void)=0
各質点情報を更新
GX_FORCE_INLINE const GxVector3 & getWindDirection(void) const
風向取得
Definition GxUnitSoftbodyBase.h:192
GX_FORCE_INLINE void setWindDirection(const GxVector3 &windDirection)
風向設定
Definition GxUnitSoftbodyBase.h:194
f32 _windForce
風の大きさ的な
Definition GxUnitSoftbodyBase.h:284
constexpr u32 getMoveStrength(u32 index) const
平行移動伝播率の取得 [ 0 ~ 100 ]
Definition GxUnitSoftbodyBase.h:207
f32 _extraLoopTime
空ループを回す時間 [ sec ]
Definition GxUnitSoftbodyBase.h:293
constexpr void setExtraLoopTime(f32 time)
空ループする時間を設定 [ sec ]
Definition GxUnitSoftbodyBase.h:235
f32 _gravityForce
重力大きさ
Definition GxUnitSoftbodyBase.h:294
b32 _isRandom
乱数を使用するかフラグ
Definition GxUnitSoftbodyBase.h:298
f32 _adjustGravityBlendRate
ローカル重力と補整重力のブレンド率(デフォルトは0.0fで、ローカル重力のみ利用)
Definition GxUnitSoftbodyBase.h:297
f32 _moveStrengthCoefficient
Y軸平行移動量への係数
Definition GxUnitSoftbodyBase.h:289
constexpr void setAirDamping(f32 damping)
空気抵抗設定
Definition GxUnitSoftbodyBase.h:184
GxUnitSoftbodyCollision * _pCollision
コリジョンデータ
Definition GxUnitSoftbodyBase.h:274
b32 _excludeTailJointSkin
末端以外のジョイントをシミュレーションするフラグ
Definition GxUnitSoftbodyBase.h:300
GxVector3 _windDirection
風の向き的な
Definition GxUnitSoftbodyBase.h:285
GX_FORCE_INLINE void setExtraLoop(f32 time=1.0f)
空ループ(シミュレーションが落ち着くまで待つ)設定 : 時間も一緒に決める(デフォルト 1秒)
Definition GxUnitSoftbodyBase.h:225
constexpr f32 getHitBackForceDamper(void) const
当たり抵抗定数取得
Definition GxUnitSoftbodyBase.h:197
constexpr void setHitBackForceDamper(f32 damper)
当たり抵抗定数設定
Definition GxUnitSoftbodyBase.h:199
u32 _lineCount
線の数
Definition GxUnitSoftbodyBase.h:279
GxVector3 _adjustGravityDirection
補整重力方向
Definition GxUnitSoftbodyBase.h:296
constexpr f32 getAirDamping(void) const
空気抵抗取得
Definition GxUnitSoftbodyBase.h:182
b32 * _pIsUpdateCollision
シミュレーション後にコリジョンデータを更新するかどうか
Definition GxUnitSoftbodyBase.h:276
GX_FORCE_INLINE b32 isUpdateExtraLoop(void) const
空ループする(シミュレーションが落ち着くまで待つ)かどうか取得
Definition GxUnitSoftbodyBase.h:228
GX_FORCE_INLINE void setIsUpdateExtraLoop(void)
空ループする(シミュレーションが落ち着くまで待つ)よう設定
Definition GxUnitSoftbodyBase.h:230
f32 _airDamping
空気抵抗定数
Definition GxUnitSoftbodyBase.h:283
f32 _hitBackForceDamper
当たり反発位置修正ダンパ [ 0.0f - 1.0f ]
Definition GxUnitSoftbodyBase.h:286
クロスシミュレーション用コリジョンクラス
Definition GxUnitSoftbodyCollision.h:18
Definition GxBase.h:24
質点クラス
Definition GxUnitSoftbodyBase.h:57
GxVector3 _velocity
速度
Definition GxUnitSoftbodyBase.h:90
f32 _radius
質点半径 - Radius
Definition GxUnitSoftbodyBase.h:95
f32 _mass
質量
Definition GxUnitSoftbodyBase.h:94
GxVector3 _positionCurrent
現在の位置
Definition GxUnitSoftbodyBase.h:88
GxVector3 _force
Definition GxUnitSoftbodyBase.h:91
GxCell(void)
デフォルトコンストラクタ
Definition GxUnitSoftbodyBase.h:73
GxVector3 _gravity
重力
Definition GxUnitSoftbodyBase.h:93
GxVector3 _normal
法線
Definition GxUnitSoftbodyBase.h:92
GxVector3 _positionOld
前の位置
Definition GxUnitSoftbodyBase.h:89
GxVector3 _position
位置
Definition GxUnitSoftbodyBase.h:87
b32 _isFixed
固定点かどうか
Definition GxUnitSoftbodyBase.h:97
GxVector3 _windRatio
風を受ける割合
Definition GxUnitSoftbodyBase.h:96
3次元ベクトル
Definition GxVector.h:245
GX_FORCE_INLINE GxVector3 getNormalizeEx(void) const
正規化ベクトルを取得(長さ0に対応)
Definition GxVector.inl:1494
32bitブーリアン
Definition GxDefine.h:173