OROCHI
 
Loading...
Searching...
No Matches
GxUnitLocate.h
Go to the documentation of this file.
1//===========================================================================
9//===========================================================================
10#pragma once
11
12GX_CORE_NAMESPACE_BEGIN()
13
14// 外部クラスの前方宣言
15#if GX_DEVELOP
16class GxHandle;
17#endif // GX_DEVELOP
18
19//===========================================================================
21//===========================================================================
23{
24 //-----------------------------------------------------------
26 //-----------------------------------------------------------
28public:
29 GX_RTTI_ABSTRACT_CLASS_NAME(GxUnitLocate, GxUnitBase, "3D座標基礎")
30 // ClassBaseReference継承クラス用禁止宣言
32
33
34 enum class MOVABLE
35 {
36 NONE,
37 STATIC,
38 DYNAMIC,
39 MAX,
40 };
41#if GX_DEVELOP
43 GX_ENUM_TABLE_MAX(MOVABLE)
44#endif //GX_DEVELOP
45
47 enum class CULLING_FRUSTUM
48 {
49 NORMAL,
50 SHADOW_0,
51 SHADOW_1,
52 SHADOW_2,
53 SHADOW_3,
57 POST,
58 OTHER,
59 MAX,
60 };
61
63 //-----------------------------------------------------------
65 //-----------------------------------------------------------
67
69 GxUnitLocate(void);
70
72 void cleanup(void) override;
73
75 //-----------------------------------------------------------
77 //-----------------------------------------------------------
79public:
81 void kill(void) override;
82
84 virtual void frustumCulling(void* pFrustum);
86 virtual void forceSetCullingFlag(u32 argument);
88 virtual void buildSpaceGraph(void* pOctree);
90 virtual void eraseSpaceGraph(void* pOctree);
91
92protected:
95
98 virtual void updateSpaceGraph(GxOtFrustumCulling* pOctree);
99
101 b32 setup(void) override;
103 void preAsyncUpdate(void) override;
105 void asyncUpdate(void) override;
107 void forceAsyncUpdate(void) override;
109 void render(void) override;
110
111#if GX_DEVELOP
113 virtual void developRender(void);
115 GX_FORCE_INLINE virtual void iconRender(void) {}
117 void drawIcon(const s32 size = 32);
118public:
120 static GxGuiBase* createGui(GxProperty& property, GxTypedObject* pOwner, const GxRtti& rtti, u32 index);
121#endif //GX_DEVELOP
122public:
124 GX_FORCE_INLINE virtual void updateLocalMatrix(void) {}
126 virtual void updateWorldMatrix(void);
127
129 void addX(f32 value);
131 void addY(f32 value);
133 void addZ(f32 value);
135 void addPosition(const GxVector3& moveVector);
137 void addQuaternion(const GxQuaternion& quaternion);
139 void rotateAxisY(const GxVector3& vector, f32 radian);
141 void rotateAxisZ(const GxVector3& vector, f32 radian);
142
147
148private:
150 b32 isHitBoundingSphere(const RENDER_VIEW view) const;
151#if GX_DEVELOP
153 void controlHandle(void);
154#endif // GX_DEVELOP
155
157 //-----------------------------------------------------------
159 //-----------------------------------------------------------
161public:
163 GX_FORCE_INLINE const GxMatrixAffine& getWorldMatrix(void) const { return _worldMatrix; }
165 void getWorldMatrix(GxMatrixAffine& matrix) const;
167 GX_FORCE_INLINE void setWorldMatrix(const GxMatrixAffine& matrix){ _worldMatrix = matrix; }
169 GX_FORCE_INLINE GxMatrixAffine* getWorldMatrixAddress(void){ return &_worldMatrix; }
171 GX_FORCE_INLINE const GxVector3& getPosition(void) const { return _worldMatrix.getPosition(); }
173 GX_FORCE_INLINE virtual void setPosition(const GxVector3& position)
174 {
175 auto* pParentLocate = static_cast<GxUnitLocate*>(getParent());
176 _position = pParentLocate ? (position - pParentLocate->getPosition()) : position;
177 }
179 GX_FORCE_INLINE const GxVector3& getLocalPosition(void) const { return _position; }
181 GX_FORCE_INLINE virtual void setLocalPosition(const GxVector3& position) { _position = position; }
183 GX_FORCE_INLINE GxQuaternion getQuaternion(void) const { return GxQuaternion(_worldMatrix); }
185 GX_FORCE_INLINE void setQuaternion(const GxQuaternion& quaternion)
186 {
187 auto* pParentLocate = gx_cast<GxUnitLocate*>(getParent());
188 _quaternion = pParentLocate ? (quaternion * pParentLocate->getQuaternion().getInverse()) : quaternion;
189 }
191 GX_FORCE_INLINE const GxQuaternion& getLocalQuaternion(void) const { return _quaternion; }
193 GX_FORCE_INLINE void setLocalQuaternion(const GxQuaternion& quaternion) { _quaternion = quaternion; }
195 GX_FORCE_INLINE GxVector3 getScale(void) const { return _worldMatrix.getScale(); }
197 GX_FORCE_INLINE virtual void setScale(const GxVector3& scale)
198 {
199 auto* pParentLocate = gx_cast<GxUnitLocate*>(getParent());
200 _scale = pParentLocate ? (scale / pParentLocate->getScale()) : scale;
201 }
203 GX_FORCE_INLINE const GxVector3& getLocalScale(void) const { return _scale; }
205 GX_FORCE_INLINE virtual void setLocalScale(const GxVector3& scale) { _scale = scale; }
207 GX_FORCE_INLINE const GxShapeSphere& getBoundingSphere(void) const { return _boundingSphere; }
209 GX_FORCE_INLINE void setBoundingSphere( const GxShapeSphere& sphere ){ _boundingSphere = sphere; }
211 void getBoundingSphereWorld(GxShapeSphere& sphere) const;
212
214 GX_FORCE_INLINE b32 isCulling(RENDER_VIEW view, u32 subView) const { return _frustumCullingFlag[static_cast<s32>(view)][subView]; }
216 GX_FORCE_INLINE b32 isCullingEnable(void) const { return _cullingEnableFlag; }
218 GX_FORCE_INLINE void setCullingEnable(b32 flag){ _cullingEnableFlag = flag; }
220 GX_FORCE_INLINE b32 enabledHierarchicalCulling(void) const { return _useAdaCulling; }
222 GX_FORCE_INLINE void setHierarchicalCulling(b32 flag) { _useAdaCulling = flag; }
224 GX_FORCE_INLINE b32 isDoneHierarchicalCulling(void) const { return _doneCulling; }
226 GX_FORCE_INLINE void doneHierarchicalCulling(b32 flag) { _doneCulling = flag; }
228 constexpr u32 getCullingState(void) const { return _cullingState; }
230 constexpr void setCullingState(u32 flag) { _cullingState = flag; }
232 constexpr void clearCullingState(void) { _cullingState = 0; }
233
235 GX_FORCE_INLINE b32 isMovable(MOVABLE movable) const { return _movable == movable; }
237 void setMovable(MOVABLE movable);
239 GX_FORCE_INLINE b32 isDirtyMovable(void) const { return _movableChanged; }
241 GX_FORCE_INLINE void setDirtyMovable(b32 enable){ _movableChanged = enable; }
242
243#if GX_DEVELOP
245 constexpr GxHandle* getHandle( void ) const { return _pHandle; }
247 GX_FORCE_INLINE b32 isIconFlag(void) const { return _iconFlag; }
249 GX_FORCE_INLINE void setIconFlag(const b32 iconFlag) { _iconFlag = iconFlag; }
251 constexpr GX_HANDLE getIconHandle(void) const { return _iconHandle; }
253 constexpr void setIconHandle(const GX_HANDLE iconHandle) { _iconHandle = iconHandle;}
254#endif // GX_DEVELOP
255
257 //-----------------------------------------------------------
259 //-----------------------------------------------------------
261private:
262 GxMatrixAffine _worldMatrix;
263 GxVector3 _position;
264 GxQuaternion _quaternion;
265 GxVector3 _scale;
266
267 GxShapeSphere _boundingSphere;
268 MOVABLE _movable;
269 b32 _movableChanged;
270 b32 _frustumCullingFlag[static_cast<s32>(RENDER_VIEW::_3D_MAX)][static_cast<s32>(CULLING_FRUSTUM::MAX)];
271 b32 _cullingEnableFlag;
272 b32 _useAdaCulling;
273 b32 _doneCulling;
274 u32 _cullingState;
275 b32 _updatedWorldMatrix;
276#if GX_DEVELOP
277 GxHandle* _pHandle;
278 b32 _iconFlag;
279 GX_HANDLE _iconHandle;
280#endif // GX_DEVELOP
281
283};
284
285GX_CORE_NAMESPACE_END()
#define GX_PROHIBIT_CLASS_BASE_REFERENCE(__CLASS__)
GxClassBaseReference継承の禁止宣言(new以外の生成禁止 + コピー禁止)
Definition GxBase.h:244
T gx_cast(GxClassBaseRoot *pObject)
Definition GxBase.h:264
void GxTypedObject
その他
Definition GxDefine.h:213
u32 GX_HANDLE
ハンドル
Definition GxDefine.h:214
RENDER_VIEW
描画優先度(ビュー)
Definition GxRender.h:442
@ _3D_MAX
汎用的な3Dビューの最大
RENDER_SUB_VIEW
描画優先度(サブビュー)
Definition GxRender.h:485
カリング用オクツリー、階層的カリングを行う
Definition GxOtFrustumCulling.h:159
プロパティクラス
Definition GxProperty.h:48
実行時型情報クラス
Definition GxRtti.h:154
球形状クラス
Definition GxShape.h:240
ユニット基礎クラス
Definition GxUnitBase.h:45
constexpr GxUnitBase * getParent(void) const
親ユニットを取得
Definition GxUnitBase.h:263
座標ユニット基礎クラス
Definition GxUnitLocate.h:23
virtual void buildSpaceGraph(void *pOctree)
空間木に追加
Definition GxUnitLocate.cpp:150
GX_FORCE_INLINE void setHierarchicalCulling(b32 flag)
階層カリングを有効にするかどうか?を設定(規定値は無効
Definition GxUnitLocate.h:222
MOVABLE
可動性定義
Definition GxUnitLocate.h:35
@ DYNAMIC
可動オブジェクト
@ STATIC
静止オブジェクト
virtual GX_FORCE_INLINE void setPosition(const GxVector3 &position)
位置の設定
Definition GxUnitLocate.h:173
GX_FORCE_INLINE b32 isCulling(RENDER_VIEW view, u32 subView) const
カリングされているか判定
Definition GxUnitLocate.h:214
void setMovable(MOVABLE movable)
可動性を設定
Definition GxUnitLocate.cpp:578
GX_FORCE_INLINE GxQuaternion getQuaternion(void) const
回転値の取得
Definition GxUnitLocate.h:183
virtual GX_FORCE_INLINE void setScale(const GxVector3 &scale)
拡縮率の設定
Definition GxUnitLocate.h:197
virtual void updateSpaceGraph(GxOtFrustumCulling *pOctree)
Definition GxUnitLocate.cpp:192
GX_FORCE_INLINE void setBoundingSphere(const GxShapeSphere &sphere)
バウンディング球を設定
Definition GxUnitLocate.h:209
GX_FORCE_INLINE void setQuaternion(const GxQuaternion &quaternion)
回転値の設定
Definition GxUnitLocate.h:185
void addX(f32 value)
X軸方向に移動
Definition GxUnitLocate.cpp:482
virtual void updateWorldMatrix(void)
ワールドマトリクスの更新
Definition GxUnitLocate.cpp:424
constexpr void clearCullingState(void)
カリングの結果のフラスタムの内外ステータスを保持する。
Definition GxUnitLocate.h:232
static CULLING_FRUSTUM getFrustumType(const RENDER_SUB_VIEW subview)
サブビューモードからカリングフラスタムのタイプを取得
Definition GxUnitLocate.cpp:230
void addQuaternion(const GxQuaternion &quaternion)
クウォータニオン加算
Definition GxUnitLocate.cpp:530
void rotateAxisZ(const GxVector3 &vector, f32 radian)
Z軸を回転軸として、ワールドのY軸を指定方向に回転
Definition GxUnitLocate.cpp:556
constexpr u32 getCullingState(void) const
カリングの結果のフラスタムの内外ステータスを取得する。
Definition GxUnitLocate.h:228
GX_FORCE_INLINE b32 isMovable(MOVABLE movable) const
可動性を判定
Definition GxUnitLocate.h:235
GX_FORCE_INLINE b32 enabledHierarchicalCulling(void) const
階層カリングを有効にするオブジェクトかどうか?
Definition GxUnitLocate.h:220
GxUnitLocate(void)
コンストラクタ
Definition GxUnitLocate.cpp:41
constexpr void setCullingState(u32 flag)
カリングの結果のフラスタムの内外ステータスを保持する。
Definition GxUnitLocate.h:230
void render(void) override
描画
Definition GxUnitLocate.cpp:279
void forceAsyncUpdate(void) override
強制並列更新(pause中も実行)
Definition GxUnitLocate.cpp:131
GX_FORCE_INLINE void doneHierarchicalCulling(b32 flag)
階層カリングを既に行ったかどうか?を設定する
Definition GxUnitLocate.h:226
void asyncUpdate(void) override
並列更新
Definition GxUnitLocate.cpp:122
GX_FORCE_INLINE const GxMatrixAffine & getWorldMatrix(void) const
ワールドマトリクスの取得
Definition GxUnitLocate.h:163
GX_FORCE_INLINE const GxQuaternion & getLocalQuaternion(void) const
ローカル回転値の取得
Definition GxUnitLocate.h:191
GX_FORCE_INLINE void setDirtyMovable(b32 enable)
可動性の変更を設定
Definition GxUnitLocate.h:241
void addY(f32 value)
Y軸方向に移動
Definition GxUnitLocate.cpp:495
void cleanup(void) override
delete直前に呼び出される関数
Definition GxUnitLocate.cpp:72
void getBoundingSphereWorld(GxShapeSphere &sphere) const
ワールド座標のバウンディング球の取得
Definition GxUnitLocate.cpp:569
GX_FORCE_INLINE void setLocalQuaternion(const GxQuaternion &quaternion)
ローカル回転値の設定
Definition GxUnitLocate.h:193
GX_FORCE_INLINE const GxShapeSphere & getBoundingSphere(void) const
バウンディング球を取得
Definition GxUnitLocate.h:207
void addZ(f32 value)
Z軸方向に移動
Definition GxUnitLocate.cpp:508
GX_FORCE_INLINE const GxVector3 & getPosition(void) const
位置の取得
Definition GxUnitLocate.h:171
GX_FORCE_INLINE const GxVector3 & getLocalPosition(void) const
ローカル位置の取得
Definition GxUnitLocate.h:179
GX_FORCE_INLINE b32 isDirtyMovable(void) const
可動性の変更を判定
Definition GxUnitLocate.h:239
virtual GX_FORCE_INLINE void updateLocalMatrix(void)
ローカルマトリクスの更新
Definition GxUnitLocate.h:124
GX_FORCE_INLINE const GxVector3 & getLocalScale(void) const
ローカル拡縮率の取得
Definition GxUnitLocate.h:203
GX_FORCE_INLINE GxVector3 getScale(void) const
拡縮率の取得
Definition GxUnitLocate.h:195
GX_FORCE_INLINE GxMatrixAffine * getWorldMatrixAddress(void)
ワールドマトリクスアドレスの取得
Definition GxUnitLocate.h:169
GX_FORCE_INLINE b32 isCullingEnable(void) const
カリングが有効かを取得
Definition GxUnitLocate.h:216
virtual void forceSetCullingFlag(u32 argument)
オブジェクトのカリングフラグを強制設定
Definition GxUnitLocate.cpp:647
b32 isAbleDeleteFromOctree(void)
8分木から削除可能か判定
Definition GxUnitLocate.cpp:602
b32 setup(void) override
初期化
Definition GxUnitLocate.cpp:87
CULLING_FRUSTUM
フラスタムカリング定義
Definition GxUnitLocate.h:48
@ OTHER
エラー回避用
@ POINT_SHADOW_1
ポイントライト影1
@ POINT_SHADOW_0
ポイントライト影0
void preAsyncUpdate(void) override
並列更新(asyncUpdateの前に実行される)
Definition GxUnitLocate.cpp:112
void addPosition(const GxVector3 &moveVector)
指定方向に移動
Definition GxUnitLocate.cpp:521
void kill(void) override
消去リクエスト
Definition GxUnitLocate.cpp:207
virtual GX_FORCE_INLINE void setLocalScale(const GxVector3 &scale)
ローカル拡縮率の設定
Definition GxUnitLocate.h:205
virtual void eraseSpaceGraph(void *pOctree)
空間木から削除
Definition GxUnitLocate.cpp:173
b32 isAbleAddToOctree(void)
8分木に登録可能か判定
Definition GxUnitLocate.cpp:589
virtual void frustumCulling(void *pFrustum)
カリングを実行
Definition GxUnitLocate.cpp:615
GX_FORCE_INLINE b32 isDoneHierarchicalCulling(void) const
階層カリングが既に行われた後かどうか?を判断する
Definition GxUnitLocate.h:224
GX_FORCE_INLINE void setWorldMatrix(const GxMatrixAffine &matrix)
ワールドマトリクスの設定
Definition GxUnitLocate.h:167
GX_FORCE_INLINE void setCullingEnable(b32 flag)
カリングの有効設定
Definition GxUnitLocate.h:218
void rotateAxisY(const GxVector3 &vector, f32 radian)
Y軸を回転軸として、ワールドのZ軸を指定方向に回転
Definition GxUnitLocate.cpp:542
virtual GX_FORCE_INLINE void setLocalPosition(const GxVector3 &position)
ローカル位置の設定
Definition GxUnitLocate.h:181
アフィン変換行列(行優先)
Definition GxMatrix.h:330
GX_FORCE_INLINE GxVector3 getScale(void) const
スケールを取得
Definition GxMatrix.inl:2165
GX_FORCE_INLINE const GxVector3 & getPosition(void) const
平行移動量を取得
Definition GxMatrix.h:454
クォータニオン
Definition GxQuaternion.h:19
3次元ベクトル
Definition GxVector.h:245
32bitブーリアン
Definition GxDefine.h:173