diff --git a/scene/SceneEntity.cpp b/scene/SceneEntity.cpp index 93c43bc..75d0ed0 100644 --- a/scene/SceneEntity.cpp +++ b/scene/SceneEntity.cpp @@ -1,3 +1,4 @@ +#include "IDrawable.h" #include "Scene.h" #include "SceneCell.h" #include "SceneCellGroup.h" @@ -11,6 +12,7 @@ SceneEntity::SceneEntity(Scene *scene) : scene(scene) { void SceneEntity::setMatrix(Matrix& newMatrix) { matrix = newMatrix; + QueryVolumeFromDrawable(); // TODO } @@ -20,6 +22,7 @@ Matrix& SceneEntity::getMatrix() { void SceneEntity::setDrawable(IDrawable *newDrawable) { drawable = newDrawable; + QueryVolumeFromDrawable(); // TODO } @@ -36,7 +39,21 @@ void SceneEntity::setCellGroup(ISceneCellGroup *newICellGroup) { } } -void SceneEntity::UpdateData(bool reInitCell) { +void SceneEntity::QueryVolumeFromDrawable() { // line 370 + if (drawable) { + drawable->GetBoundingVolume(&cullingVolume); + TransformVolumeAndPivot(); + // TODO + } else { + // TODO + } +} + +void SceneEntity::TransformVolumeAndPivot() { // line 406 + cullingVolume.Transform(matrix); +} + +void SceneEntity::UpdateData(bool reInitCell) { // line 464 // HACK auto cell = sceneCellGroup->cellByIndex(0); if (reInitCell) { diff --git a/scene/SceneEntity.h b/scene/SceneEntity.h index 684103f..a2fe222 100644 --- a/scene/SceneEntity.h +++ b/scene/SceneEntity.h @@ -1,6 +1,7 @@ #pragma once #include "ISceneEntity.h" #include "cdcMath/Math.h" +#include "rendering/Culling/BasicPrimitives.h" namespace cdc { @@ -16,7 +17,10 @@ public: Matrix matrix; // 20 IDrawable *drawable = nullptr; // 6C SceneCellGroup *sceneCellGroup = nullptr; // 70 + BasicCullingVolume cullingVolume; // F0 + void QueryVolumeFromDrawable(); + void TransformVolumeAndPivot(); void UpdateData(bool); public: