OROCHI
 
Loading...
Searching...
No Matches
GxDynamicsBullet.h
Go to the documentation of this file.
1//===========================================================================
11//===========================================================================
12#pragma once
13
14#if PLATFORM_BULLET_SUPPORT
15
17//===========================================================================
19//===========================================================================
20class GxDynamicsBullet : public GxDynamics
21{
22 //-----------------------------------------------------------
24 //-----------------------------------------------------------
26public:
27 // RTTI宣言
28 GX_RTTI_CLASS(GxDynamicsBullet, GxDynamics)
29 // GxClassBase継承クラス用禁止宣言
30 GX_PROHIBIT_CLASS_BASE(GxDynamicsBullet)
31
32 class GxWorld;
33 class GxObject;
34 class GxConstraint;
35 class GxConditionInformation;
36 struct GxRayResult;
37
39 struct GxParamRevolute : public GxStructBase
40 {
41 //-----------------------------------------------------------
43 //-----------------------------------------------------------
45
46 // RTTI定義
47 GX_RTTI_STRUCT(GxParamRevolute);
48
50 //-------------------------------------------------------------
52 //-------------------------------------------------------------
54
56 GxParamRevolute(void)
57 : _swingLimitMin(0)
58 , _swingLimitMax(PI2)
59 , _disableCollision(false)
60 {}
62 ~GxParamRevolute(void){}
63
65 //-------------------------------------------------------------
67 //-------------------------------------------------------------
69
70 // MinとMaxの間の角度しか移動できない
71 f32 _swingLimitMin;
72 f32 _swingLimitMax;
73 b32 _disableCollision;
74
76 };
77
79 //-----------------------------------------------------------
81 //-----------------------------------------------------------
83
85 GxDynamicsBullet(void) {}
87 ~GxDynamicsBullet(void) override {}
88
90 //-----------------------------------------------------------
92 //-----------------------------------------------------------
94
96 GxDynamics::GxObject* allocObject(void) override;
98 GxDynamics::GxConstraint* allocConstraint(void) override;
99
101 GxDynamicsBullet::GxObject* createMesh(u32 index, b32 active, GxMatrixAffine* pMatrix, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeTrimesh& trimesh, btBvhTriangleMeshShape* pBtTrimeshShape, f32 friction = 0.5f, f32 margin = DYNAMICS_COLLISION_MARGIN);
102
104 GxDynamicsBullet::GxConstraint* createConstraintFixed(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1);
105
107};
108
109//===========================================================================
111//===========================================================================
112class GxDynamicsBullet::GxWorld : public GxDynamics::GxWorld
113{
114 //-------------------------------------------------------------
116 //-------------------------------------------------------------
118public:
119 // RTTI定義
120 GX_RTTI_CLASS(GxDynamicsBullet::GxWorld, GxDynamics::GxWorld);
121 // GxClassBase継承クラス用禁止宣言
122 GX_PROHIBIT_CLASS_BASE(GxWorld);
123
125 //-----------------------------------------------------------
127 //-----------------------------------------------------------
129
131 GxWorld(void);
132
134 ~GxWorld(void) override {}
135
137 //-----------------------------------------------------------
139 //-----------------------------------------------------------
141
143 b32 alloc(u32 meshCount, const GxVector3& worldAabbMin, const GxVector3& worldAabbMax, u16 maxHandles,
144 u32 stackAllocatorSize = DYNAMICS_DEFAULT_STACK_ALLOCATOR_SIZE,
145 u32 maxPersistentManifoldPoolSize = DYNAMICS_DEFAULT_MAX_PERSISTENT_MANIFOLD_POOL_SIZE,
146 u32 maxCollisionAlgorithmPoolSize = DYNAMICS_DEFAULT_MAX_COLLISION_ALGORITHM_POOL_SIZE) override;
147
149 void free(void) override;
150
152 void update(void) override;
153
155 void registerObject(GxDynamics::GxObject* pObject) override;
157 void banObject(GxDynamics::GxObject* pObject) override;
158
160 void registerConstraint(GxDynamics::GxConstraint* pConstraint, b32 disableCollisions) override;
162 void banConstraint(GxDynamics::GxConstraint* pConstraint) override;
163
165 void reset(void) override;
166
168 void setGravity(const GxVector3& gravity = GxDynamics::GxWorld::DYNAMICS_GRAVITY) override;
170 void setGravity(const f32 gravityX, const f32 gravityY, const f32 gravityZ) override;
171
185 b32 checkRayClosestVsWorld(GxDynamics::GxRayResult* pRayResult, const GxVector3& startPosition, const GxVector3& endPosition, GxDynamics::GxConditionInformation* pConditionInformation = nullptr) override;
186
188 b32 checkRayClosestVsSingle(GxDynamics::GxRayResult* pRayResult, GxDynamics::GxObject* pTargetObject, const GxVector3& startPosition, const GxVector3& endPosition, GxDynamics::GxConditionInformation* pConditionInformation = nullptr) override;
189
191 static void customNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatcherInfo);
192
197 virtual GxRayCallback* createRayCallback( const btVector3& rayFrom, const btVector3& rayEnd, GxConditionInformation* pConditionInformation );
198
200 void detachObjectFromWorld(GxDynamics::GxObject* pObject) override;
201
203 //memo: Nxにあるグループの処理はBulletには存在しないので同じ物を独自実装しています
204 GX_FORCE_INLINE b32 isGroupColide( u32 group1, u32 group2 ) const
205 {
206 if (group1 >= 32 || group2 >= 32)
207 {
208 return false;
209 }
210 return ((_groupCollide[group1]>>group2) & 0x1) ? true : false;
211 }
212public:
214 b32 createBulletWorld(void);
219 b32 deleteBulletWorld(void);
220
222 void detachConstraintFromBullet(GxConstraint* pObject);
223
224#if (GX_DEVELOP)
226 void setBtDebugDrawer(btIDebugDraw* pDrawer);
227#endif //(GX_DEVELOP)
228
230 btDefaultVehicleRaycaster* createBtVehicleRaycaster(void);
231
233 //-----------------------------------------------------------
235 //-----------------------------------------------------------
237protected:
238 btCollisionConfiguration* _pBulletCollisionConfiguration;
239 btCollisionDispatcher* _pDispatcher;
240 btAxisSweep3* _pBroadphase;
241 btSequentialImpulseConstraintSolver* _pSolver;
242 btDiscreteDynamicsWorld* _pBulletWorld;
243 btCollisionAlgorithmCreateFunc* _pDynamicsAlgorithmCreateFunction[DYNAMICS_ALGORITHM_NUM];
244 GxVector3 _worldAabbMin;
245 GxVector3 _worldAabbMax;
246 u16 _maxHandles;
247 u32 _btStackAllocatorSize;
248 u32 _btMaxPersistentManifoldPoolSize;
249 u32 _btMaxCollisionAlgorithmPoolSize;
250
251 btOverlapFilterCallback* _btFilterCallback;
252
254};
255
256//===========================================================================
258//===========================================================================
259class GxDynamicsBullet::GxObject : public GxDynamics::GxObject
260{
261 //-------------------------------------------------------------
263 //-------------------------------------------------------------
265public:
266 // RTTI定義
267 GX_RTTI_CLASS(GxDynamicsBullet::GxObject, GxDynamics::GxObject);
268 // GxClassBase継承クラス用禁止宣言
269 GX_PROHIBIT_CLASS_BASE(GxObject);
270
272 //-----------------------------------------------------------
274 //-----------------------------------------------------------
276
278 GxObject(void);
280 ~GxObject(void) override;
281
283 void initialize(b32 active, GxMatrixAffine* pMatrix, const GxVector3& offset, const GxQuaternion& rotateOffset) override;
284
286 //-----------------------------------------------------------
288 //-----------------------------------------------------------
290
292 void preUpdate(void) override;
294 void postUpdate(void) override;
295
297 b32 createSphere(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeSphere& sphere, const GxRigidBodyParam& rigidParam, f32 margin) override;
299 b32 createBox(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeBox& box, const GxRigidBodyParam& rigidParam, f32 margin) override;
301 b32 createCylinder(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeCylinder& cylinder, const GxRigidBodyParam& rigidParam, f32 margin) override;
303 b32 createMultisphere(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeMultisphere& multiSphere, const GxRigidBodyParam& rigidParam, f32 margin) override;
305 b32 createCapsule(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeCapsule& capsule, const GxRigidBodyParam& rigidParam, f32 margin) override;
307 b32 createConvexShape(b32 active, GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxVector3* pVertex, u32 numVertex, const GxRigidBodyParam& rigidParam, f32 margin) override;
309 b32 createCompoundObject(GxMatrixAffine* pMatrix, s32 jointIndex, const GxVector3& offset, const GxQuaternion& rotateOffset, f32 margin) override;
311 b32 createMesh(b32 active, GxMatrixAffine* pMatrix, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeTrimesh& trimesh, f32 friction = 0.5f, b32 isCompress = true, GxVector3* pAabbMin = nullptr, GxVector3* pAabbMax = nullptr, f32 margin = DYNAMICS_COLLISION_MARGIN) override;
313 b32 createMesh(b32 active, GxMatrixAffine* pMatrix, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeTrimesh& trimesh, btBvhTriangleMeshShape* pBtTrimeshShape, f32 friction = 0.5f, f32 margin = DYNAMICS_COLLISION_MARGIN);
314
316 b32 addCompoundSphere(const GxVector3& offset, const GxShapeSphere& sphere) override;
318 b32 addCompoundBox(const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeBox& box) override;
320 b32 addCompoundCapsule(const GxVector3& offset, const GxQuaternion& rotateOffset, const GxShapeCapsule& capsule) override;
322 b32 addCompoundConvex(const GxVector3& offset, const GxQuaternion& rotateOffset, const GxVector3* pVertex, u32 numVertex) override;
324 b32 endAddCompound(b32 isActive, const GxRigidBodyParam& rigidParam) override;
325
327 void applyForce(const GxVector3& force, const GxVector3& position) override;
329 void applyImpulse(const GxVector3& impulse, const GxVector3& position) override;
330
332 GX_FORCE_INLINE btRigidBody* getBtRigidBody(void) const { return _pBtRigidBody; }
334 b32 createRigidBody(btCollisionShape* pShape, const GxMatrixAffine& matrix, const GxVector3& offset, const GxQuaternion& rotateOffset, const GxRigidBodyParam& rigidParam, f32 margin = DYNAMICS_COLLISION_MARGIN);
335
344 GX_FORCE_INLINE u32 getBtActivationState(void) const { return _pBtRigidBody ? _pBtRigidBody->getActivationState() : 0; }
346 GX_FORCE_INLINE void setBtActivationState(u32 state) { if (_pBtRigidBody) _pBtRigidBody->setActivationState(state); }
347
348#if GX_DEVELOP
350 void developDraw(const GxColor& color, PRIMITIVE_FILL_MODE fillMode = PRIMITIVE_FILL_MODE::WIRE) override;
352 void developDrawSub(btCollisionShape* pShape, GxMatrixAffine& worldMatrix, const GxColor& color, PRIMITIVE_FILL_MODE fillMode);
353#endif // GX_DEVELOP
354
356 //-----------------------------------------------------------
358 //-----------------------------------------------------------
360
362 void setLinearVelocity(const GxVector3& velocity) override;
364 void getLinearVelocity(GxVector3& velocity) override;
365
367 void setAngularVelocity(const GxVector3& angular) override;
369 void getAngularVelocity(GxVector3& angular) override;
370
372 void setPosition(const GxVector3& position) override;
374 void getPosition(GxVector3& position) override;
376 void setQuaternion(const GxQuaternion& quaternion) override;
378 void getQuaternion(GxQuaternion& quaternion) override;
383 void setDampingRatio(f32 linearDamping, f32 angularDamping) override;
387 void setDeactivationTime(f32 time) override;
390 void setSleepingThresholds(f32 linear, f32 angular) override;
391
393 void setMatrix(const GxMatrixAffine& matrix) override;
395 GxMatrixAffine getMatrix(void) override;
396
398 GX_FORCE_INLINE b32 isSleeping(void) const { return false; }
400 GX_FORCE_INLINE void setLineCheck( const b32 isLineCheck ){ _isLineCheck = isLineCheck; }
401
402 //-----------------------------------------------------------
423 //-----------------------------------------------------------
425 void setGroup( u16 group );
427 u16 getGroup( void );
429 constexpr s16 getMask( void ) const { return _mask; }
431 void setGroupMask( s16 group, s16 mask );
432
434 //-----------------------------------------------------------
436 //-----------------------------------------------------------
438protected:
439 // note:グループとマスクについて
440 // BulletがBroadPhaseで利用するフラグ。
441 // _maskには当たる相手の_groupを指定する。
442 // _checkFlagはcustomNearCallback()でのフラグ判定なので、それより先に行われる。
443 // メモ:Bulletのワールドへの登録時に設定するので、再設定にはbanとregisterが必要。
444 btCollisionShape* _pBtShape;
445 btRigidBody* _pBtRigidBody;
446 btTransform _oldTransform;
447 b32 _isLineCheck;
448 s16 _mask;
449 btTriangleIndexVertexArray* _pBtTriangleIndexVertexArray;
450
452};
453
454//===========================================================================
456//===========================================================================
457class GxDynamicsBullet::GxConstraint : public GxDynamics::GxConstraint
458{
459 //-------------------------------------------------------------
461 //-------------------------------------------------------------
463public:
464 // RTTI定義
465 GX_RTTI_CLASS(GxDynamicsBullet::GxConstraint, GxDynamics::GxConstraint);
466 // GxClassBase継承クラス用禁止宣言
467 GX_PROHIBIT_CLASS_BASE(GxConstraint);
468
470 //-----------------------------------------------------------
472 //-----------------------------------------------------------
474
476 GxConstraint(void) : _pBtConstraint(nullptr) {}
477
479 ~GxConstraint(void) override;
480
482 //-----------------------------------------------------------
484 //-----------------------------------------------------------
486
489 b32 createConstraintSpherical(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxVector3& pivot0, const GxVector3& pivot1, b32 disableCollisions) override;
490
493 b32 createConstraintRevolute(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxMatrixAffine& mat0, const GxMatrixAffine& mat1, b32 disableCollisions) override;
495 b32 createConstraintRevolute(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxVector3& pivot0, const GxVector3& pivot1, const GxVector3& axis0, const GxVector3& axis1, const GxVector3& base0, const GxVector3& base1, b32 disableCollisions) override;
498 b32 createConstraintRevolute(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxVector3& pivot0, const GxVector3& pivot1, const GxVector3& axis0, const GxVector3& axis1, const GxVector3& base0, const GxVector3& base1, const GxParamRevolute& param);
499
501 b32 createConstraintConeTwist(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1, const GxParamConeTwist& param) override;
502
504 b32 createConstraintFixed(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxVector3& pivot0, const GxVector3& pivot1) override;
506 b32 createConstraintFixed(b32 active, GxDynamics::GxObject* pObject0, GxDynamics::GxObject* pObject1, const GxMatrixAffine& matrix0, const GxMatrixAffine& matrix1);
507
509 void setParameterRevolute(const f32 lowerLimit, const f32 upperLimit) override;
510
511#if GX_DEVELOP
513 void developDraw(void) override;
514#endif // GX_DEVELOP
515
517 //-----------------------------------------------------------
519 //-----------------------------------------------------------
521public:
523 constexpr btTypedConstraint* getBtConstraint(void) const { return _pBtConstraint; }
525 GxMatrixAffine getMatrix(void) override;
527 // todo:コールバックの実装
528 void setBreakParam(b32 isBrakable, f32 maxForce, f32 maxTorque) override;
529
531 //-----------------------------------------------------------
533 //-----------------------------------------------------------
535protected:
536 btTypedConstraint* _pBtConstraint;
537
539};
540
541//===========================================================================
542// 判定条件
543//===========================================================================
544class GxDynamicsBullet::GxConditionInformation : public GxDynamics::GxConditionInformation
545{
546 //-----------------------------------------------------------
548 //-----------------------------------------------------------
550public:
551 // RTTI定義
552 GX_RTTI_CLASS(GxDynamicsBullet::GxConditionInformation, GxDynamics::GxConditionInformation);
553
555 //-----------------------------------------------------------
557 //-----------------------------------------------------------
559
562 : _mask(-1)
563 {}
564
566 //-----------------------------------------------------------
568 //-----------------------------------------------------------
570
571 s16 _mask;
572
574};
575
576//===========================================================================
581//===========================================================================
582struct GxDynamics::GxRayCallback : public btCollisionWorld::ClosestRayResultCallback
583{
584 //-----------------------------------------------------------
586 //-----------------------------------------------------------
588public:
590 GxRayCallback( const btVector3& rayFromWorld, const btVector3& rayToWorld, GxConditionInformation* pConditionInfo )
591 : ClosestRayResultCallback(rayFromWorld, rayToWorld)
592 , _pConditionInfo( pConditionInfo )
593 , _triangleIndex(0)
594 {}
595
597 //-----------------------------------------------------------
599 //-----------------------------------------------------------
601
607 bool needsCollision(btBroadphaseProxy* pProxy) const override;
608
612 btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace) override;
613
615 //-----------------------------------------------------------
617 //-----------------------------------------------------------
619
620 GxConditionInformation* _pConditionInfo;
621 u32 _triangleIndex;
622
624};
625
626//===========================================================================
631//===========================================================================
632struct GxDynamics::GxConvexCallback : public btCollisionWorld::ClosestConvexResultCallback
633{
634 //-----------------------------------------------------------
636 //-----------------------------------------------------------
638public:
640 GxConvexCallback( const btVector3& rayFromWorld, const btVector3& rayToWorld, GxConditionInformation* pConditionInfo )
641 : ClosestConvexResultCallback(rayFromWorld, rayToWorld)
642 , _pConditionInfo( pConditionInfo )
643 , _triangleIndex(0)
644 {}
645
647 //-----------------------------------------------------------
649 //-----------------------------------------------------------
651
657 bool needsCollision(btBroadphaseProxy* proxy0) const override;
658
662 btScalar addSingleResult(btCollisionWorld::LocalConvexResult& convexResult, bool normalInWorldSpace) override;
663
665 //-----------------------------------------------------------
667 //-----------------------------------------------------------
669
670 GxConditionInformation* _pConditionInfo;
671 u32 _triangleIndex;
672
674};
675
676//===========================================================================
678//===========================================================================
679struct GxDynamicsBullet::GxRayResult : public GxDynamics::GxRayResult
680{
681 //-----------------------------------------------------------
683 //-----------------------------------------------------------
685public:
687 GxRayResult(void){}
689 ~GxRayResult(void) override {};
690
692 //-----------------------------------------------------------
694 //-----------------------------------------------------------
696
698 void setResult(GxDynamics::GxRayCallback& resultCallback);
700 void setResult(GxDynamics::GxConvexCallback& resultCallback);
701
703};
704
705GX_PHYSICS_NAMESPACE_END()
706
707#endif //PLATFORM_BULLET_SUPPORT
#define GX_PROHIBIT_CLASS_BASE(__CLASS__)
GxClassBase継承の禁止宣言
Definition GxBase.h:240
#define DYNAMICS_DEFAULT_MAX_PERSISTENT_MANIFOLD_POOL_SIZE
物理演算の汎用的な最大プールサイズデフォルト値
Definition GxDynamics.h:17
#define DYNAMICS_COLLISION_MARGIN
物理演算のコリジョンマージン
Definition GxDynamics.h:15
#define DYNAMICS_ALGORITHM_NUM
物理演算のアルゴリズム関数確保数
Definition GxDynamics.h:19
#define DYNAMICS_DEFAULT_STACK_ALLOCATOR_SIZE
物理演算のスタックアロケーターサイズデフォルト値
Definition GxDynamics.h:16
#define DYNAMICS_DEFAULT_MAX_COLLISION_ALGORITHM_POOL_SIZE
物理演算のコリジョンアルゴリズム用最大プールサイズデフォルト値
Definition GxDynamics.h:18
#define GX_PHYSICS_NAMESPACE_BEGIN()
ネームスペースマクロ
Definition GxPhysics.h:28
PRIMITIVE_FILL_MODE
塗りつぶしモード
Definition GxPrimitive.h:31
@ WIRE
ワイヤーフレーム
Definition GxDynamics.h:996
GxConditionInformation(void)
コンストラクタ
Definition GxDynamics.h:1014
GxDynamics 拘束クラス
Definition GxDynamics.h:783
virtual GX_FORCE_INLINE b32 createConstraintSpherical(b32, GxDynamics::GxObject *, GxDynamics::GxObject *, const GxVector3 &, const GxVector3 &, b32)
Definition GxDynamics.h:843
virtual GX_FORCE_INLINE b32 createConstraintRevolute(b32, GxDynamics::GxObject *, GxDynamics::GxObject *, const GxMatrixAffine &, const GxMatrixAffine &, b32)
Definition GxDynamics.h:847
virtual GX_FORCE_INLINE void setBreakParam(b32, f32, f32)
壊れパラメタ設定
Definition GxDynamics.h:915
virtual GX_FORCE_INLINE GxMatrixAffine getMatrix(void)
マトリクスを取得
Definition GxDynamics.h:905
virtual GX_FORCE_INLINE b32 createConstraintConeTwist(b32, GxDynamics::GxObject *, GxDynamics::GxObject *, const GxMatrixAffine &, const GxMatrixAffine &, const GxParamConeTwist &)
ConeTwistタイプの拘束作成
Definition GxDynamics.h:852
GxConstraint(void)
デフォルトコンストラクタ
Definition GxDynamics.cpp:1564
virtual GX_FORCE_INLINE b32 createConstraintFixed(b32, GxDynamics::GxObject *, GxDynamics::GxObject *, const GxVector3 &, const GxVector3 &)
固定タイプの拘束作成
Definition GxDynamics.h:855
virtual GX_FORCE_INLINE void setParameterRevolute(const f32, const f32)
回転軸タイプのパラメタを設定
Definition GxDynamics.h:861
~GxConstraint(void) override
デストラクタ
Definition GxDynamics.h:833
GxDynamics基本オブジェクトクラス
Definition GxDynamics.h:519
virtual GX_FORCE_INLINE void getLinearVelocity(GxVector3 &)
直線速度取得[m/sec]
Definition GxDynamics.h:643
virtual GX_FORCE_INLINE b32 createMultisphere(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxShapeMultisphere &, const GxRigidBodyParam &, f32)
マルチ球の作成
Definition GxDynamics.h:602
virtual GX_FORCE_INLINE void setPosition(const GxVector3 &)
座標設定(速度等のパラメタが変更されるわけではないことに注意)
Definition GxDynamics.h:651
virtual GX_FORCE_INLINE void postUpdate(void)
更新後処理
Definition GxDynamics.h:581
virtual GX_FORCE_INLINE void setMatrix(const GxMatrixAffine &)
マトリクス設定
Definition GxDynamics.h:692
virtual GX_FORCE_INLINE b32 addCompoundBox(const GxVector3 &, const GxQuaternion &, const GxShapeBox &)
複合オブジェクトに追加:箱
Definition GxDynamics.h:619
virtual GX_FORCE_INLINE b32 endAddCompound(b32, const GxRigidBodyParam &)
複合オブジェクト追加終了
Definition GxDynamics.h:625
virtual GX_FORCE_INLINE void getQuaternion(GxQuaternion &)
姿勢取得
Definition GxDynamics.h:658
virtual GX_FORCE_INLINE b32 addCompoundConvex(const GxVector3 &, const GxQuaternion &, const GxVector3 *, u32)
複合オブジェクトに追加:凸形状
Definition GxDynamics.h:623
virtual GX_FORCE_INLINE void preUpdate(void)
更新前処理
Definition GxDynamics.h:579
virtual GX_FORCE_INLINE b32 addCompoundCapsule(const GxVector3 &, const GxQuaternion &, const GxShapeCapsule &)
複合オブジェクトに追加:カプセル
Definition GxDynamics.h:621
virtual GX_FORCE_INLINE b32 createBox(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxShapeBox &, const GxRigidBodyParam &, f32)
箱の作成
Definition GxDynamics.h:596
virtual GX_FORCE_INLINE void applyForce(const GxVector3 &, const GxVector3 &)
力を加える(加速度に影響)
Definition GxDynamics.h:587
virtual GX_FORCE_INLINE void setDeactivationTime(f32)
Definition GxDynamics.h:669
virtual GX_FORCE_INLINE GxMatrixAffine getMatrix(void)
マトリクス取得
Definition GxDynamics.h:694
virtual GX_FORCE_INLINE b32 createCylinder(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxShapeCylinder &, const GxRigidBodyParam &, f32)
円柱の作成
Definition GxDynamics.h:599
virtual GX_FORCE_INLINE void applyImpulse(const GxVector3 &, const GxVector3 &)
衝撃力を加える(速度に影響)
Definition GxDynamics.h:590
virtual GX_FORCE_INLINE b32 createCapsule(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxShapeCapsule &, const GxRigidBodyParam &, f32)
カプセルの作成
Definition GxDynamics.h:605
virtual GX_FORCE_INLINE void initialize(b32, GxMatrixAffine *, const GxVector3 &, const GxQuaternion &)
オブジェクトの初期化
Definition GxDynamics.h:567
~GxObject(void) override
デストラクタ
Definition GxDynamics.cpp:1391
virtual GX_FORCE_INLINE void setAngularVelocity(const GxVector3 &)
回転速度設定[m/sec]
Definition GxDynamics.h:646
virtual GX_FORCE_INLINE b32 createConvexShape(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxVector3 *, u32, const GxRigidBodyParam &, f32)
凸形状の作成
Definition GxDynamics.h:608
virtual GX_FORCE_INLINE void getPosition(GxVector3 &)
座標取得
Definition GxDynamics.h:653
virtual GX_FORCE_INLINE b32 createCompoundObject(GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, f32)
複合形状の作成
Definition GxDynamics.h:611
virtual GX_FORCE_INLINE void setSleepingThresholds(f32, f32)
Definition GxDynamics.h:673
virtual GX_FORCE_INLINE b32 addCompoundSphere(const GxVector3 &, const GxShapeSphere &)
複合オブジェクトに追加:球
Definition GxDynamics.h:617
virtual GX_FORCE_INLINE b32 createMesh(b32, GxMatrixAffine *, const GxVector3 &, const GxQuaternion &, const GxShapeTrimesh &, f32=0.5f, b32=true, GxVector3 *=nullptr, GxVector3 *=nullptr, f32=DYNAMICS_COLLISION_MARGIN)
背景メッシュの作成
Definition GxDynamics.h:614
virtual GX_FORCE_INLINE b32 createSphere(b32, GxMatrixAffine *, s32, const GxVector3 &, const GxQuaternion &, const GxShapeSphere &, const GxRigidBodyParam &, f32)
球の作成
Definition GxDynamics.h:593
virtual GX_FORCE_INLINE void getAngularVelocity(GxVector3 &)
回転速度取得[m/sec]
Definition GxDynamics.h:648
virtual GX_FORCE_INLINE void setLinearVelocity(const GxVector3 &)
直線速度設定[m/sec]
Definition GxDynamics.h:641
virtual GX_FORCE_INLINE void setQuaternion(const GxQuaternion &)
姿勢設定(速度等のパラメタが変更されるわけではないことに注意)
Definition GxDynamics.h:656
virtual GX_FORCE_INLINE void setDampingRatio(f32, f32)
Definition GxDynamics.h:664
GxObject(void)
デフォルトコンストラクタ
Definition GxDynamics.cpp:1370
GxDynamics 基本ワールドクラス
Definition GxDynamics.h:272
virtual GX_FORCE_INLINE void banObject(GxDynamics::GxObject *)
ワールドからオブジェクトを登録解除
Definition GxDynamics.h:344
virtual void setGravity(const GxVector3 &gravity=GxDynamics::GxWorld::DYNAMICS_GRAVITY)
重力を設定(ワールドに登録されている剛体全てに設定)
Definition GxDynamics.cpp:1037
~GxWorld(void) override
デストラクタ
Definition GxDynamics.cpp:850
virtual b32 checkRayClosestVsWorld(GxDynamics::GxRayResult *, const GxVector3 &, const GxVector3 &, GxConditionInformation *=nullptr)
Definition GxDynamics.h:433
GxWorld(void)
デフォルトコンストラクタ
Definition GxDynamics.cpp:830
virtual GX_FORCE_INLINE void registerConstraint(GxDynamics::GxConstraint *, b32)
ワールドに拘束クラスを登録
Definition GxDynamics.h:347
virtual GX_FORCE_INLINE void detachObjectFromWorld(GxObject *)
ワールドからオブジェクトをデタッチ
Definition GxDynamics.h:394
virtual void update(void)
更新処理
Definition GxDynamics.h:335
virtual b32 checkRayClosestVsSingle(GxDynamics::GxRayResult *, GxObject *, const GxVector3 &, const GxVector3 &, GxConditionInformation *=nullptr)
指定オブジェクトとのレイチェック
Definition GxDynamics.h:436
virtual GX_FORCE_INLINE void registerObject(GxDynamics::GxObject *)
ワールドにオブジェクトを登録
Definition GxDynamics.h:342
virtual GX_FORCE_INLINE void reset(void)
ワールドの状態をリセットする
Definition GxDynamics.h:363
static const GxVector3 DYNAMICS_GRAVITY
重力
Definition GxDynamics.h:286
virtual GX_FORCE_INLINE void banConstraint(GxDynamics::GxConstraint *)
ワールドから拘束クラスを登録解除
Definition GxDynamics.h:349
virtual b32 alloc(u32 meshCount, const GxVector3 &worldAabbMin, const GxVector3 &worldAabbMax, u16 maxHandles, u32 stackAllocatorSize=DYNAMICS_DEFAULT_STACK_ALLOCATOR_SIZE, u32 maxPersistentManifoldPoolSize=DYNAMICS_DEFAULT_MAX_PERSISTENT_MANIFOLD_POOL_SIZE, u32 maxCollisionAlgorithmPoolSize=DYNAMICS_DEFAULT_MAX_COLLISION_ALGORITHM_POOL_SIZE)
ワールドのメモリ確保
Definition GxDynamics.cpp:880
virtual void free(void)
ワールドのメモリ解放
Definition GxDynamics.cpp:888
物理演算クラス
Definition GxDynamics.h:27
箱形状クラス
Definition GxShape.h:333
カプセル形状クラス
Definition GxShape.h:707
円柱形状クラス
Definition GxShape.h:634
マルチ球形状クラス
Definition GxShape.h:776
球形状クラス
Definition GxShape.h:240
三角メッシュ形状クラス
Definition GxShape.h:912
Definition GxColor.h:21
レイ判定情報
Definition GxDynamics.h:1042
GxRayResult(void)
コンストラクタ
Definition GxDynamics.h:1049
virtual ~GxRayResult(void)
デストラクタ
Definition GxDynamics.h:1057
アフィン変換行列(行優先)
Definition GxMatrix.h:330
クォータニオン
Definition GxQuaternion.h:19
Definition GxBase.h:24
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173