1414#include " Runtime/Components/RenderComponent.h"
1515#include " Runtime/Components/PhysicsComponent.h"
1616#include " Runtime/Engine.hpp"
17+ #include " Runtime/NextEngineHelper.h"
1718#include " Runtime/Components/SkinnedMeshComponent.h"
1819
1920#include < spdlog/spdlog.h>
@@ -559,6 +560,48 @@ namespace Assets
559560 }
560561 }
561562
563+ if (NextEngine::GetInstance ()->GetUserSettings ().DebugDraw_BoundingBox )
564+ {
565+ for (auto & node : nodes_)
566+ {
567+ auto render = node->GetComponent <Runtime::RenderComponent>();
568+ if (!render || !render->IsVisible () || !render->IsDrawable ())
569+ {
570+ continue ;
571+ }
572+
573+ const Model* model = GetModel (render->GetModelId ());
574+ if (!model)
575+ {
576+ continue ;
577+ }
578+
579+ glm::vec3 localaabbMin = model->GetLocalAABBMin ();
580+ glm::vec3 localaabbMax = model->GetLocalAABBMax ();
581+
582+ const auto & worldMtx = node->WorldTransform ();
583+ glm::vec3 corners[8 ];
584+ corners[0 ] = glm::vec3 (worldMtx * glm::vec4 (localaabbMin.x , localaabbMin.y , localaabbMin.z , 1 .0f ));
585+ corners[1 ] = glm::vec3 (worldMtx * glm::vec4 (localaabbMax.x , localaabbMin.y , localaabbMin.z , 1 .0f ));
586+ corners[2 ] = glm::vec3 (worldMtx * glm::vec4 (localaabbMin.x , localaabbMax.y , localaabbMin.z , 1 .0f ));
587+ corners[3 ] = glm::vec3 (worldMtx * glm::vec4 (localaabbMax.x , localaabbMax.y , localaabbMin.z , 1 .0f ));
588+ corners[4 ] = glm::vec3 (worldMtx * glm::vec4 (localaabbMin.x , localaabbMin.y , localaabbMax.z , 1 .0f ));
589+ corners[5 ] = glm::vec3 (worldMtx * glm::vec4 (localaabbMax.x , localaabbMin.y , localaabbMax.z , 1 .0f ));
590+ corners[6 ] = glm::vec3 (worldMtx * glm::vec4 (localaabbMin.x , localaabbMax.y , localaabbMax.z , 1 .0f ));
591+ corners[7 ] = glm::vec3 (worldMtx * glm::vec4 (localaabbMax.x , localaabbMax.y , localaabbMax.z , 1 .0f ));
592+
593+ glm::vec3 worldAABBMin = corners[0 ];
594+ glm::vec3 worldAABBMax = corners[0 ];
595+ for (int i = 1 ; i < 8 ; ++i)
596+ {
597+ worldAABBMin = glm::min (worldAABBMin, corners[i]);
598+ worldAABBMax = glm::max (worldAABBMax, corners[i]);
599+ }
600+
601+ NextEngineHelper::DrawAuxBox (worldAABBMin, worldAABBMax, glm::vec4 (0 .2f , 0 .8f , 1 .0f , 1 .0f ), 1 .5f );
602+ }
603+ }
604+
562605 if ( NextEngine::GetInstance ()->GetTotalFrames () % 10 == 0 )
563606 {
564607 // if (sceneDirtyForCpuAS_)
@@ -755,4 +798,4 @@ namespace Assets
755798 skinnedVerticesSimpleAddr_ = skinnedVerticesSimple;
756799 jointMatricesAddr_ = jointMatrices;
757800 }
758- }
801+ }
0 commit comments