OROCHI
 
Loading...
Searching...
No Matches
GxOtFrustumCulling.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_CORE_NAMESPACE_BEGIN()
13
15class GxUnitModelBase;
16
17//===========================================================================
19//===========================================================================
21{
22 //-------------------------------------------------------------
24 //-------------------------------------------------------------
26public:
28 friend GxOtFrustumCulling;
29
31 //-------------------------------------------------------------
33 //-------------------------------------------------------------
35
39 ~GxCullingMeshGroupAlias(void) override { }
40
42 //-------------------------------------------------------------
44 //-------------------------------------------------------------
46
48 void resetCullingFlags(void);
50 void frustumCulling(void* pFrustum);
52 void forceSetCullingFlag(u32 value);
53
55 //-------------------------------------------------------------
57 //-------------------------------------------------------------
59
61 static void setCullingStepWidth(const u32& value);
63 GX_FORCE_INLINE static u32 getCullingStepWidth(void){ return _stepWidth; }
64
66 //-------------------------------------------------------------
68 //-------------------------------------------------------------
70
71 static u32 _stepWidth;
74 u32 _state;
79
81#if GX_DEVELOP
82 GX_CHAR _name[16];
83 static b32 _testDrawBoundingBox;
84#endif //GX_DEVELOP
85};
86
87//===========================================================================
89//===========================================================================
91{
92 //-------------------------------------------------------------
94 //-------------------------------------------------------------
96public:
98 friend GxOtFrustumCulling;
99
101 //-------------------------------------------------------------
103 //-------------------------------------------------------------
105
109 ~GxCullingInstanceAlias(void) override { }
110
112 //-------------------------------------------------------------
114 //-------------------------------------------------------------
116
118 void resetCullingFlags(void);
120 void frustumCulling(void* pFrustum);
122 void forceSetCullingFlag(u32 value);
123
125 //-------------------------------------------------------------
127 //-------------------------------------------------------------
129
131 static void setCullingStepWidth(const u32& value);
133 GX_FORCE_INLINE static u32 getCullingStepWidth(void) { return _stepWidth; }
134
136 //-------------------------------------------------------------
138 //-------------------------------------------------------------
140
141 static u32 _stepWidth;
144 u32 _state;
147
151
153};
154
155//===========================================================================
157//===========================================================================
159{
160 //-------------------------------------------------------------
162 //-------------------------------------------------------------
164public:
175
176 struct GxHQeryParam;
177 struct GxCullingMeshParam;
178
179 class GxCullingOctant;
180
181 GX_RTTI_CLASS(GxOtFrustumCulling, GxOctree)
182
183
184 //-------------------------------------------------------------
186 //-------------------------------------------------------------
188
190 GxOtFrustumCulling(void);
193
195 ~GxOtFrustumCulling(void) override;
196
198 //-------------------------------------------------------------
200 //-------------------------------------------------------------
202public:
204 void eraseTree(void) override;
205
207 void resetCullingFlags( void );
208
211
213 b32 windowQueryForBB(GxArray& arvSpaces, const GxVector3& min, const GxVector3& max) override;
214
216 b32 addMesh(const GxResModel::GxMesh* pMesh, const GxUnitModelBase* pUnit, u32 beginIndex, u32 endIndex, u8*** pppCullingFlag, const GxVector3& min, const GxVector3& max);
217
219 b32 eraseMesh( const GxResModel::GxMesh* pMesh, u32 beginIndex, u32 endIndex, const GxVector3& min, const GxVector3& max );
221 void eraseAllMeshes(void);
222
224 GxCullingInstanceAlias* findInstance( const GxMatrixAffine* pMatrix, u32 index );
225
227 b32 addInstance(const GxMatrixAffine* pMatrix, const GxUnitModelBase* pUnit, u32 beginIndex, u32 endIndex, u8*** pppCullingFlag, const GxVector3& min, const GxVector3& max);
228
230 b32 eraseInstance( GxMatrixAffine* pMatrix, u32 beginIndex, u32 endIndex, const GxVector3& min, const GxVector3& max );
232 void eraseAllInstances(void);
233
235 void hierarchicalQueryForFrustum( GxArray& arvSpaces, b32** ppState, const GxShapeFrustum& frustum );
236
238 void hierarchicalQueryForFrustum( const GxShapeFrustum& frustum );
240 void assembleHitNodeArray( GxArray& arvSpaces, b32** ppState);
241
243 void cullingMeshGroup(void* pArgument);
245 void cullingInstanceGroup(void* pArgument);
247 void cullingUnitGroup(void* pArgument);
248protected:
250 GxOctree::GxNode* allocateNode(void) override;
252 void hierarchicalQueryForFrustumCB(void* pArgument);
253
255 //-------------------------------------------------------------
257 //-------------------------------------------------------------
259public:
261 constexpr GxArray* getGlobalMeshList(void) const { return _pGlobalMeshAriasList; }
263 constexpr GxArray* getGlobalInstanceList(void) const { return _pGlobalInstanceAriasList; }
265 GX_FORCE_INLINE b32 isJudgePartsFlagState( void ) const { return _isJudgePartsFlag; }
267 GX_FORCE_INLINE void setJudgePartsFlagState( const b32& value ) { _isJudgePartsFlag = value; }
270 GX_FORCE_INLINE b32 isEmpty(void) const override { return (_pGlobalObjectList == nullptr || _pGlobalObjectList->getCount() == 0) ||
271 (_pGlobalMeshAriasList == nullptr || _pGlobalMeshAriasList->getCount() == 0) ||
272 (_pGlobalInstanceAriasList == nullptr || _pGlobalInstanceAriasList->getCount() == 0);}
274 //-------------------------------------------------------------
276 //-------------------------------------------------------------
278#if GX_OCTREE_INFO
279public:
280 static u32 _numMesh;
281#endif // GX_OCTREE_INFO
282private:
283 b32 _isJudgePartsFlag;
284 GxHQeryParam* _pParameter[8];
285 GxArray* _pGlobalMeshAriasList;
286 GxArray* _pGlobalInstanceAriasList;
287
289};
290
291//===========================================================================
293//===========================================================================
295{
296 //-------------------------------------------------------------
298 //-------------------------------------------------------------
300
301 GX_RTTI_STRUCT(GxCullingMeshParam)
302
303
304 //-------------------------------------------------------------
306 //-------------------------------------------------------------
308public:
311
313 //-------------------------------------------------------------
315 //-------------------------------------------------------------
317
321
323};
324
325//===========================================================================
327//===========================================================================
329{
330 //-------------------------------------------------------------
332 //-------------------------------------------------------------
334
335 GX_RTTI_STRUCT(GxHQeryParam)
336
337
338 //-------------------------------------------------------------
340 //-------------------------------------------------------------
342
344 GxHQeryParam(void);
346 virtual ~GxHQeryParam(void);
347
349 //-------------------------------------------------------------
351 //-------------------------------------------------------------
353
358
360};
361
362//===========================================================================
364//===========================================================================
366{
367 //-------------------------------------------------------------
369 //-------------------------------------------------------------
371public:
373
374 friend GxOtFrustumCulling;
375
377 //-------------------------------------------------------------
379 //-------------------------------------------------------------
381
383 GxCullingOctant(void);
385 ~GxCullingOctant(void) override;
386
388 //-----------------------------------------------------------
390 //-----------------------------------------------------------
392
395
398
400 b32 findMesh(GxResModel::GxMesh* pMesh, u32 beginIndex, u32 endIndex) const;
401
402 // 全ての登録オブジェクトの削除
403 void clearMeshes(void);
404
407
410
412 b32 findInstance(GxMatrixAffine* pMatrix) const;
413
415 void clearInstances(void);
416
418 void resetCullingFlags(void);
419
421 //-----------------------------------------------------------
423 //-----------------------------------------------------------
425
427 GX_FORCE_INLINE b32 isEmpty(void) const override { return ( getObjectList()->getCount() == 0 && _pMeshList->getCount() == 0 && _pInstanceList->getCount() == 0); }
428
431 constexpr GxArray* getMeshList( void ) const { return _pMeshList; }
432
435 constexpr GxArray* getInstanceList( void ) const { return _pInstanceList; }
436
437 //-----------------------------------------------------------
439 //-----------------------------------------------------------
441protected:
444
446};
447
448GX_CORE_NAMESPACE_END()
ALLOCATOR_TYPE
アロケータ定義
Definition GxAllocator.h:355
配列クラス
Definition GxArray.h:18
constexpr u32 getCount(void) const
配列数を取得
Definition GxArray.h:132
オブジェクト基底クラス
Definition GxBase.h:88
カリングする際に、フラグと本体が別々なので、それにアクセスする為に使う
Definition GxOtFrustumCulling.h:91
u32 _state
カリング用ステータス変数
Definition GxOtFrustumCulling.h:144
void forceSetCullingFlag(u32 value)
強制カリング
Definition GxOtFrustumCulling.cpp:173
void frustumCulling(void *pFrustum)
カリング処理
Definition GxOtFrustumCulling.cpp:139
void resetCullingFlags(void)
カリングステータスの初期化
Definition GxOtFrustumCulling.cpp:129
static GX_FORCE_INLINE u32 getCullingStepWidth(void)
メッシュをグループ単位でカリングする場合のグループサイズを取得
Definition GxOtFrustumCulling.h:133
static void setCullingStepWidth(const u32 &value)
メッシュをグループ単位でカリングする場合のグループサイズを設定
Definition GxOtFrustumCulling.cpp:117
GxCullingInstanceAlias(void)
デフォルトコンストラクタ
Definition GxOtFrustumCulling.h:107
u32 _beginIndex
オブジェく内部でのメッシュのインデックス
Definition GxOtFrustumCulling.h:145
GxUnitModelBase * _pModel
メッシュが所属するオブジェクトへのポインタ
Definition GxOtFrustumCulling.h:143
GxShapeSphere _worldSphere
ワールド座標でのバウンディングボックス
Definition GxOtFrustumCulling.h:148
u8 *** _pppCullingFlag8
オブジェく内部でのメッシュのカリングフラグ
Definition GxOtFrustumCulling.h:149
b32 _doneCulling
カリング終了フラグ
Definition GxOtFrustumCulling.h:150
~GxCullingInstanceAlias(void) override
デストラクタ
Definition GxOtFrustumCulling.h:109
u32 _endIndex
オブジェく内部でのメッシュのインデックス
Definition GxOtFrustumCulling.h:146
GxMatrixAffine * _pInstanceMatrix
マトリクス
Definition GxOtFrustumCulling.h:142
static u32 _stepWidth
ステップ幅
Definition GxOtFrustumCulling.h:141
カリングする際に、フラグと本体が別々なので、それにアクセスする為に使う
Definition GxOtFrustumCulling.h:21
u32 _state
カリング用ステータス変数
Definition GxOtFrustumCulling.h:74
GxResModel::GxMesh * _pBeginMesh
先頭メッシュへのポインタ
Definition GxOtFrustumCulling.h:72
u32 _endIndex
オブジェクト内部でのメッシュのインデックス
Definition GxOtFrustumCulling.h:76
GxCullingMeshGroupAlias(void)
デフォルトコンストラクタ
Definition GxOtFrustumCulling.h:37
static GX_FORCE_INLINE u32 getCullingStepWidth(void)
メッシュをグループ単位でカリングする場合のグループサイズを取得
Definition GxOtFrustumCulling.h:63
b32 _doneCulling
カリング終了フラグ
Definition GxOtFrustumCulling.h:78
GxUnitModelBase * _pModel
メッシュが所属するオブジェクトへのポインタ
Definition GxOtFrustumCulling.h:73
static u32 _stepWidth
メッシュをグループ単位でカリングする場合のグループサイズ
Definition GxOtFrustumCulling.h:71
u8 *** _pppCullingFlagU8
オブジェクト内部でのメッシュのカリングフラグ
Definition GxOtFrustumCulling.h:77
~GxCullingMeshGroupAlias(void) override
デストラクタ
Definition GxOtFrustumCulling.h:39
u32 _beginIndex
オブジェクト内部でのメッシュのインデックス
Definition GxOtFrustumCulling.h:75
GxShapeBox _worldBoundingBox
ワールド座標でのバウンディングボックス
Definition GxOtFrustumCulling.h:80
8分木ノードクラス
Definition GxOctree.h:265
constexpr GxArray * getObjectList(void) const
Definition GxOctree.h:328
8分木クラス
Definition GxOctree.h:39
GxArray * _pGlobalObjectList
インスタンスグローバルリスト
Definition GxOctree.h:236
カリング用オクツリーのオクタント
Definition GxOtFrustumCulling.h:366
GxArray * _pMeshList
メッシュリスト
Definition GxOtFrustumCulling.h:442
b32 addInstance(GxCullingInstanceAlias *pObject)
インスタンスオブジェクトを追加
Definition GxOtFrustumCulling.cpp:1213
~GxCullingOctant(void) override
デストラクタ
Definition GxOtFrustumCulling.cpp:1176
b32 deleteInstance(GxMatrixAffine *pMatrix)
インスタンスオブジェクトの削除
Definition GxOtFrustumCulling.cpp:1235
GX_FORCE_INLINE b32 isEmpty(void) const override
ノードにオブジェクトが含まれているか
Definition GxOtFrustumCulling.h:427
GxArray * _pInstanceList
インスタンスリスト
Definition GxOtFrustumCulling.h:443
void clearInstances(void)
全ての登録オブジェクトの削除
Definition GxOtFrustumCulling.cpp:1267
b32 addMesh(GxCullingMeshGroupAlias *pObject)
メッシュ・オブジェクトを追加
Definition GxOtFrustumCulling.cpp:1323
constexpr GxArray * getMeshList(void) const
Definition GxOtFrustumCulling.h:431
b32 findMesh(GxResModel::GxMesh *pMesh, u32 beginIndex, u32 endIndex) const
メッシュ・オブジェクトを検索
Definition GxOtFrustumCulling.cpp:1298
void resetCullingFlags(void)
カリングのフラグをリセットする
Definition GxOtFrustumCulling.cpp:1402
constexpr GxArray * getInstanceList(void) const
Definition GxOtFrustumCulling.h:435
GxCullingOctant(void)
デフォルトコンストラクタ
Definition GxOtFrustumCulling.cpp:1164
b32 findInstance(GxMatrixAffine *pMatrix) const
インスタンスオブジェクトを検索
Definition GxOtFrustumCulling.cpp:1191
b32 deleteMesh(GxResModel::GxMesh *pMesh)
メッシュ・オブジェクトの削除
Definition GxOtFrustumCulling.cpp:1344
カリング用オクツリー、階層的カリングを行う
Definition GxOtFrustumCulling.h:159
GX_FORCE_INLINE b32 isJudgePartsFlagState(void) const
パーツフラグがOFFのメッシュならツリーに追加しないかどうかを判定
Definition GxOtFrustumCulling.h:265
constexpr GxArray * getGlobalMeshList(void) const
グローバルなメッシュリストを取得
Definition GxOtFrustumCulling.h:261
constexpr GxArray * getGlobalInstanceList(void) const
グローバルなインスタンスリストを取得
Definition GxOtFrustumCulling.h:263
OCTANT
オクタントステータス
Definition GxOtFrustumCulling.h:167
@ OCTANT_CROSS
フラスタムの境界をまたいでいる
Definition GxOtFrustumCulling.h:169
@ OCTANT_OUTSIDE
フラスタムの外
Definition GxOtFrustumCulling.h:170
@ OCTANT_INSIDE
フラスタムの内側
Definition GxOtFrustumCulling.h:168
@ OCTANT_INIT
初期値
Definition GxOtFrustumCulling.h:173
@ OCTANT_IGNORE
無視
Definition GxOtFrustumCulling.h:172
@ OCTANT_FORCED
強制カリングされた
Definition GxOtFrustumCulling.h:171
void hierarchicalQueryForFrustum(GxArray &arvSpaces, b32 **ppState, const GxShapeFrustum &frustum)
フラスタムを使って、階層的にクエリを行う
Definition GxOtFrustumCulling.cpp:948
void eraseAllMeshes(void)
全てのオブジェクトを取り除く
Definition GxOtFrustumCulling.cpp:612
void assembleHitNodeArray(GxArray &arvSpaces, b32 **ppState)
階層カリングで交差判定が出たノードを取得
Definition GxOtFrustumCulling.cpp:905
GX_FORCE_INLINE void setJudgePartsFlagState(const b32 &value)
パーツフラグがOFFのメッシュならツリーに追加しないかどうかを設定
Definition GxOtFrustumCulling.h:267
b32 eraseInstance(GxMatrixAffine *pMatrix, u32 beginIndex, u32 endIndex, const GxVector3 &min, const GxVector3 &max)
オブジェクトをオクツリーから削除
Definition GxOtFrustumCulling.cpp:414
void cullingInstanceGroup(void *pArgument)
グループ単位でカリング処理(又はフラグ更新処理)
Definition GxOtFrustumCulling.cpp:1062
void cullingUnitGroup(void *pArgument)
グループ単位でカリング処理(又はフラグ更新処理)
Definition GxOtFrustumCulling.cpp:1092
b32 windowQueryForBB(GxArray &arvSpaces, const GxVector3 &min, const GxVector3 &max) override
ウインドウクエリを行う(階層カリング用)
Definition GxOtFrustumCulling.cpp:732
b32 addMesh(const GxResModel::GxMesh *pMesh, const GxUnitModelBase *pUnit, u32 beginIndex, u32 endIndex, u8 ***pppCullingFlag, const GxVector3 &min, const GxVector3 &max)
オブジェクトをオクツリーに追加
Definition GxOtFrustumCulling.cpp:506
b32 addInstance(const GxMatrixAffine *pMatrix, const GxUnitModelBase *pUnit, u32 beginIndex, u32 endIndex, u8 ***pppCullingFlag, const GxVector3 &min, const GxVector3 &max)
オブジェクトをオクツリーに追加
Definition GxOtFrustumCulling.cpp:366
b32 eraseMesh(const GxResModel::GxMesh *pMesh, u32 beginIndex, u32 endIndex, const GxVector3 &min, const GxVector3 &max)
オブジェクトをオクツリーから削除
Definition GxOtFrustumCulling.cpp:565
GX_FORCE_INLINE b32 isEmpty(void) const override
Definition GxOtFrustumCulling.h:270
void hierarchicalQueryForFrustumCB(void *pArgument)
フラスタムを使って階層的にクエリを行う
Definition GxOtFrustumCulling.cpp:645
void eraseAllInstances(void)
全てのオブジェクトを削除
Definition GxOtFrustumCulling.cpp:463
GxOtFrustumCulling(void)
デフォルトコンストラクタ
Definition GxOtFrustumCulling.cpp:200
GxOctree::GxNode * allocateNode(void) override
GxNodeのメモリ確保
Definition GxOtFrustumCulling.cpp:350
GxCullingInstanceAlias * findInstance(const GxMatrixAffine *pMatrix, u32 index)
インスタンスが既に登録済みか検索
Definition GxOtFrustumCulling.cpp:286
~GxOtFrustumCulling(void) override
デストラクタ
Definition GxOtFrustumCulling.cpp:235
void resetCullingFlags(void)
全てのオブジェクトのカリングフラグをリセット
Definition GxOtFrustumCulling.cpp:303
void eraseTree(void) override
ツリーの削除
Definition GxOtFrustumCulling.cpp:251
void cullingMeshGroup(void *pArgument)
グループ単位でカリング処理(又はフラグ更新処理)
Definition GxOtFrustumCulling.cpp:1021
GxCullingMeshGroupAlias * findMesh(const GxResModel::GxMesh *pMesh) const
メッシュが既に登録済みか検索
Definition GxOtFrustumCulling.cpp:263
箱形状クラス
Definition GxShape.h:333
角錐台
Definition GxShape.h:531
球形状クラス
Definition GxShape.h:240
モデル基礎クラス
Definition GxUnitModelBase.h:19
アフィン変換行列(行優先)
Definition GxMatrix.h:330
ジョブを投げる際に使うスレッド関数用のパラメータ
Definition GxOtFrustumCulling.h:295
GxShapeFrustum _frustum
フラスタム形状
Definition GxOtFrustumCulling.h:320
u32 _endIndex
終了インデックス
Definition GxOtFrustumCulling.h:319
GxCullingMeshParam(void)
デフォルトコンストラクタ
Definition GxOtFrustumCulling.h:310
u32 _startIndex
開始インデックス
Definition GxOtFrustumCulling.h:318
階層クエリの為のパラメータ
Definition GxOtFrustumCulling.h:329
GxShapeFrustum _frustum
フラスタム形状
Definition GxOtFrustumCulling.h:355
u32 _aunParentSpace
親の空間
Definition GxOtFrustumCulling.h:357
virtual ~GxHQeryParam(void)
デストラクタ
Definition GxOtFrustumCulling.cpp:1148
u32 _aunParentLevelN
親の低のレベル
Definition GxOtFrustumCulling.h:356
s32 * _pQueryArray
クエリ配列
Definition GxOtFrustumCulling.h:354
GxHQeryParam(void)
デフォルトコンストラクタ
Definition GxOtFrustumCulling.cpp:1141
モデルリソースメッシュ構造体
Definition GxResModel.h:122
Definition GxBase.h:24
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173