OROCHI
 
Loading...
Searching...
No Matches
GxConvexConcaveCollisionAlgorithm.h
Go to the documentation of this file.
1//===========================================================================
11//===========================================================================
12#pragma once
13
14class btDispatcher;
15
17//===========================================================================
20//===========================================================================
21class GxConvexTriangleCallback : public btTriangleCallback
22{
23 //-------------------------------------------------------------
25 //-------------------------------------------------------------
27public:
29 GxConvexTriangleCallback(btDispatcher* pDispatcher, const btCollisionObjectWrapper* pBody0, const btCollisionObjectWrapper* pBody1, b32 isSwapped);
31 ~GxConvexTriangleCallback(void) override;
32
33private:
34 // コピーコンストラクタ(※使用禁止)
36 // 代入演算子(※使用禁止)
37 GX_FORCE_INLINE const GxConvexTriangleCallback& operator=(const GxConvexTriangleCallback&);
38
40 //-----------------------------------------------------------
42 //-----------------------------------------------------------
44public:
46 void setTimeStepAndCounters(btScalar collisionMarginTriangle,const btDispatcherInfo& dispatchInfo, btManifoldResult* pResultOut);
48 void processTriangle(btVector3* pTriangle, s32 partId, s32 triangleIndex) override;
50 void clearCache(void);
52 GX_FORCE_INLINE const btVector3& getAabbMin(void) const { return _aabbMin; }
54 GX_FORCE_INLINE const btVector3& getAabbMax(void) const { return _aabbMax; }
55
57 //-----------------------------------------------------------
59 //-----------------------------------------------------------
61public:
63
64 btPersistentManifold* _pManifold;
65
66private:
67 const btCollisionObjectWrapper* _pConvexBody;
68 const btCollisionObjectWrapper* _pTriBody;
69
70 btVector3 _aabbMin;
71 btVector3 _aabbMax;
72
73 btManifoldResult* _pResultOut;
74 btDispatcher* _pDispatcher;
75 const btDispatcherInfo* _pDispatchInfo;
76 btScalar _collisionMarginTriangle;
77
79};
80
81//===========================================================================
82// GxConvexConcaveCollisionAlgorithm
83// btConvexConcaveCollisionAlgorithmを流用
84//===========================================================================
85class GxConvexConcaveCollisionAlgorithm : public btActivatingCollisionAlgorithm
86{
87 //-------------------------------------------------------------
89 //-------------------------------------------------------------
91public:
93 struct GxCreateFunction : public btCollisionAlgorithmCreateFunc
94 {
96 GX_FORCE_INLINE btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& constructionInfo, const btCollisionObjectWrapper* pBody0, const btCollisionObjectWrapper* pBody1) override
97 {
98 void* pMemory = btAlignedAlloc(sizeof(GxConvexConcaveCollisionAlgorithm), 16);
99 return new (pMemory) GxConvexConcaveCollisionAlgorithm(constructionInfo, pBody0, pBody1, false);
100 }
101 };
102
104 struct GxSwappedCreateFunction : public btCollisionAlgorithmCreateFunc
105 {
107 GX_FORCE_INLINE btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& constructionInfo, const btCollisionObjectWrapper* pBody0, const btCollisionObjectWrapper* pBody1) override
108 {
109 void* mem = btAlignedAlloc(sizeof(GxConvexConcaveCollisionAlgorithm), 16);
110 return new (mem) GxConvexConcaveCollisionAlgorithm(constructionInfo, pBody0, pBody1, true);
111 }
112 };
113
115 //-----------------------------------------------------------
117 //-----------------------------------------------------------
119
121 GxConvexConcaveCollisionAlgorithm( const btCollisionAlgorithmConstructionInfo& constructionInfo, const btCollisionObjectWrapper* pBody0, const btCollisionObjectWrapper* pBody1, b32 isSwapped);
124private:
128 GX_FORCE_INLINE const GxConvexConcaveCollisionAlgorithm& operator=(const GxConvexConcaveCollisionAlgorithm&);
129
131 //-----------------------------------------------------------
133 //-----------------------------------------------------------
135public:
137 void processCollision(const btCollisionObjectWrapper* pBody0, const btCollisionObjectWrapper* pBody1, const btDispatcherInfo& dispatchInfo, btManifoldResult* pResultOut) override;
139 btScalar calculateTimeOfImpact(btCollisionObject* pBody0, btCollisionObject* pBody1, const btDispatcherInfo& dispatchInfo, btManifoldResult* pResultOut) override;
141 void getAllContactManifolds(btManifoldArray& manifoldArray) override;
143 void clearCache(void);
144
146 //-----------------------------------------------------------
148 //-----------------------------------------------------------
150private:
151 b32 _isSwapped;
152 // ここを自前コールバックに置き換えている
153 GxConvexTriangleCallback _btConvexTriangleCallback;
154
156};
157GX_PHYSICS_NAMESPACE_END()
#define GX_PHYSICS_NAMESPACE_BEGIN()
ネームスペースマクロ
Definition GxPhysics.h:28
Definition GxConvexConcaveCollisionAlgorithm.h:86
~GxConvexConcaveCollisionAlgorithm(void) override
デストラクタ
Definition GxConvexConcaveCollisionAlgorithm.cpp:50
void processCollision(const btCollisionObjectWrapper *pBody0, const btCollisionObjectWrapper *pBody1, const btDispatcherInfo &dispatchInfo, btManifoldResult *pResultOut) override
コリジョン処理
Definition GxConvexConcaveCollisionAlgorithm.cpp:227
btScalar calculateTimeOfImpact(btCollisionObject *pBody0, btCollisionObject *pBody1, const btDispatcherInfo &dispatchInfo, btManifoldResult *pResultOut) override
衝突の時間を計算
Definition GxConvexConcaveCollisionAlgorithm.cpp:264
void clearCache(void)
キャッシュクリア
Definition GxConvexConcaveCollisionAlgorithm.cpp:215
void getAllContactManifolds(btManifoldArray &manifoldArray) override
全ての接触マニホールドを取得
Definition GxConvexConcaveCollisionAlgorithm.cpp:58
GxConvexConcaveCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo &constructionInfo, const btCollisionObjectWrapper *pBody0, const btCollisionObjectWrapper *pBody1, b32 isSwapped)
コンストラクタ
Definition GxConvexConcaveCollisionAlgorithm.cpp:40
Definition GxConvexConcaveCollisionAlgorithm.h:22
GX_FORCE_INLINE const btVector3 & getAabbMax(void) const
AABBの最大値を取得
Definition GxConvexConcaveCollisionAlgorithm.h:54
GX_FORCE_INLINE const btVector3 & getAabbMin(void) const
AABBの最小値を取得
Definition GxConvexConcaveCollisionAlgorithm.h:52
btPersistentManifold * _pManifold
マニホールド
Definition GxConvexConcaveCollisionAlgorithm.h:64
s32 _triangleCount
三角形の数
Definition GxConvexConcaveCollisionAlgorithm.h:62
生成関数
Definition GxConvexConcaveCollisionAlgorithm.h:94
GX_FORCE_INLINE btCollisionAlgorithm * CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo &constructionInfo, const btCollisionObjectWrapper *pBody0, const btCollisionObjectWrapper *pBody1) override
コリジョン生成アルゴリズム
Definition GxConvexConcaveCollisionAlgorithm.h:96
スワップ生成関数
Definition GxConvexConcaveCollisionAlgorithm.h:105
GX_FORCE_INLINE btCollisionAlgorithm * CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo &constructionInfo, const btCollisionObjectWrapper *pBody0, const btCollisionObjectWrapper *pBody1) override
コリジョン生成アルゴリズム
Definition GxConvexConcaveCollisionAlgorithm.h:107
32bitブーリアン
Definition GxDefine.h:173