OROCHI
 
Loading...
Searching...
No Matches
GxConvexConcaveCollisionAlgorithmDynamics.h
Go to the documentation of this file.
1//===========================================================================
10//===========================================================================
11#pragma once
12
13class btDispatcher;
14
16
17//===========================================================================
20//===========================================================================
21class GxConvexTriangleCallbackDynamics : public btTriangleCallback
22{
23 //-------------------------------------------------------------
25 //-------------------------------------------------------------
27public:
29 GxConvexTriangleCallbackDynamics(btDispatcher* pDispatcher, const btCollisionObjectWrapper* pBody0, const btCollisionObjectWrapper* pBody1, b32 isSwapped);
32private:
36 GX_FORCE_INLINE const GxConvexTriangleCallbackDynamics& operator=(const GxConvexTriangleCallbackDynamics&);
37
39 //-----------------------------------------------------------
41 //-----------------------------------------------------------
43public:
45 void setTimeStepAndCounters(btScalar collisionMarginTriangle, const btDispatcherInfo& dispatchInfo, btManifoldResult* pResultOut);
47 void processTriangle(btVector3* pTriangle, s32 partId, s32 triangleIndex) override;
49 void clearCache(void);
51 GX_FORCE_INLINE const btVector3& getAabbMin(void) const { return _aabbMin; }
53 GX_FORCE_INLINE const btVector3& getAabbMax(void) const { return _aabbMax; }
54
56 //-----------------------------------------------------------
58 //-----------------------------------------------------------
60public:
62
63 btPersistentManifold* _pManifold;
64private:
65 const btCollisionObjectWrapper* _pConvexBody;
66 const btCollisionObjectWrapper* _pTriBody;
67
68 btVector3 _aabbMin;
69 btVector3 _aabbMax;
70
71 btManifoldResult* _pResultOut;
72 btDispatcher* _pDispatcher;
73 const btDispatcherInfo* _pDispatchInfo;
74 btScalar _collisionMarginTriangle;
75
77};
78
79//===========================================================================
80// GxConvexConcaveCollisionAlgorithmDynamics
81// btConvexConcaveCollisionAlgorithmを流用
82//===========================================================================
83class GxConvexConcaveCollisionAlgorithmDynamics : public btActivatingCollisionAlgorithm
84{
85 //-------------------------------------------------------------
87 //-------------------------------------------------------------
89public:
91 struct GxCreateFunction : public btCollisionAlgorithmCreateFunc
92 {
94 GX_FORCE_INLINE btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& constructionInfo, const btCollisionObjectWrapper* pBody0, const btCollisionObjectWrapper* pBody1) override
95 {
96 void* pMemory = btAlignedAlloc(sizeof(GxConvexConcaveCollisionAlgorithmDynamics), 16);
97 return new (pMemory) GxConvexConcaveCollisionAlgorithmDynamics(constructionInfo, pBody0, pBody1, false);
98 }
99 };
100
102 struct GxSwappedCreateFunction : public btCollisionAlgorithmCreateFunc
103 {
105 GX_FORCE_INLINE btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& constructionInfo, const btCollisionObjectWrapper* pBody0, const btCollisionObjectWrapper* pBody1) override
106 {
107 void* pMemory = btAlignedAlloc(sizeof(GxConvexConcaveCollisionAlgorithmDynamics), 16);
108 return new (pMemory) GxConvexConcaveCollisionAlgorithmDynamics(constructionInfo, pBody0, pBody1, true);
109 }
110 };
111
113 //-----------------------------------------------------------
115 //-----------------------------------------------------------
117public:
119 GxConvexConcaveCollisionAlgorithmDynamics( const btCollisionAlgorithmConstructionInfo& constructionInfo, const btCollisionObjectWrapper* pBody0, const btCollisionObjectWrapper* pBody1, b32 isSwapped);
122private:
127
129 //-----------------------------------------------------------
131 //-----------------------------------------------------------
133public:
135 void processCollision (const btCollisionObjectWrapper* pBody0, const btCollisionObjectWrapper* pBody1, const btDispatcherInfo& dispatchInfo, btManifoldResult* pResultOut) override;
137 btScalar calculateTimeOfImpact(btCollisionObject* pBody0, btCollisionObject* pBody1, const btDispatcherInfo& dispatchInfo, btManifoldResult* pResultOut) override;
139 void getAllContactManifolds(btManifoldArray& manifoldArray) override;
141 void clearCache(void);
142
144 //-----------------------------------------------------------
146 //-----------------------------------------------------------
148private:
149 b32 _isSwapped;
150 // ここを自前コールバックに置き換えている
151 GxConvexTriangleCallbackDynamics _btConvexTriangleCallback;
152
154};
155
156GX_PHYSICS_NAMESPACE_END()
#define GX_PHYSICS_NAMESPACE_BEGIN()
ネームスペースマクロ
Definition GxPhysics.h:28
Definition GxConvexConcaveCollisionAlgorithmDynamics.h:84
void getAllContactManifolds(btManifoldArray &manifoldArray) override
全ての接触マニホールドを取得
Definition GxConvexConcaveCollisionAlgorithmDynamics.cpp:196
void processCollision(const btCollisionObjectWrapper *pBody0, const btCollisionObjectWrapper *pBody1, const btDispatcherInfo &dispatchInfo, btManifoldResult *pResultOut) override
コリジョン処理
Definition GxConvexConcaveCollisionAlgorithmDynamics.cpp:219
~GxConvexConcaveCollisionAlgorithmDynamics(void) override
デストラクタ
Definition GxConvexConcaveCollisionAlgorithmDynamics.cpp:188
GxConvexConcaveCollisionAlgorithmDynamics(const btCollisionAlgorithmConstructionInfo &constructionInfo, const btCollisionObjectWrapper *pBody0, const btCollisionObjectWrapper *pBody1, b32 isSwapped)
コンストラクタ
Definition GxConvexConcaveCollisionAlgorithmDynamics.cpp:178
void clearCache(void)
キャッシュクリア
Definition GxConvexConcaveCollisionAlgorithmDynamics.cpp:207
btScalar calculateTimeOfImpact(btCollisionObject *pBody0, btCollisionObject *pBody1, const btDispatcherInfo &dispatchInfo, btManifoldResult *pResultOut) override
衝突の時間を計算
Definition GxConvexConcaveCollisionAlgorithmDynamics.cpp:256
Definition GxConvexConcaveCollisionAlgorithmDynamics.h:22
GX_FORCE_INLINE const btVector3 & getAabbMin(void) const
AABBの最小値を取得
Definition GxConvexConcaveCollisionAlgorithmDynamics.h:51
btPersistentManifold * _pManifold
マニホールド
Definition GxConvexConcaveCollisionAlgorithmDynamics.h:63
GX_FORCE_INLINE const btVector3 & getAabbMax(void) const
AABBの最大値を取得
Definition GxConvexConcaveCollisionAlgorithmDynamics.h:53
s32 _triangleCount
三角形の数
Definition GxConvexConcaveCollisionAlgorithmDynamics.h:61
生成関数
Definition GxConvexConcaveCollisionAlgorithmDynamics.h:92
GX_FORCE_INLINE btCollisionAlgorithm * CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo &constructionInfo, const btCollisionObjectWrapper *pBody0, const btCollisionObjectWrapper *pBody1) override
コリジョン生成アルゴリズム
Definition GxConvexConcaveCollisionAlgorithmDynamics.h:94
スワップ生成関数
Definition GxConvexConcaveCollisionAlgorithmDynamics.h:103
GX_FORCE_INLINE btCollisionAlgorithm * CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo &constructionInfo, const btCollisionObjectWrapper *pBody0, const btCollisionObjectWrapper *pBody1) override
コリジョン生成アルゴリズム
Definition GxConvexConcaveCollisionAlgorithmDynamics.h:105
32bitブーリアン
Definition GxDefine.h:173