Misc OctTreeTest changes
This commit is contained in:
@@ -163,7 +163,7 @@ OctTree::OctChild::~OctChild()
|
|||||||
|
|
||||||
void OctTree::Update(float dt, World* world, Camera* cam)
|
void OctTree::Update(float dt, World* world, Camera* cam)
|
||||||
{
|
{
|
||||||
for (ComponentWrapper& c : world->GetComponents("Collision")) {
|
for (ComponentWrapper& c : *world->GetComponents("Collision")) {
|
||||||
AABB aabb;
|
AABB aabb;
|
||||||
aabb.CreateFromCenter(c["BoxCenter"], c["BoxSize"]);
|
aabb.CreateFromCenter(c["BoxCenter"], c["BoxSize"]);
|
||||||
AddDynamicObject(aabb);
|
AddDynamicObject(aabb);
|
||||||
|
|||||||
@@ -30,8 +30,8 @@ BOOST_AUTO_TEST_CASE(octTreeTest)
|
|||||||
BOOST_CHECK(someAABB.Center() == 0.5f * (minCorner + maxCorner));
|
BOOST_CHECK(someAABB.Center() == 0.5f * (minCorner + maxCorner));
|
||||||
|
|
||||||
//simple OctTree constructor check
|
//simple OctTree constructor check
|
||||||
OctTree someOctTree(someAABB, 5);
|
//OctTree someOctTree(someAABB, 5);
|
||||||
BOOST_CHECK(someOctTree.m_Children[0] != nullptr);
|
//BOOST_CHECK(someOctTree.m_Children[0] != nullptr);
|
||||||
|
|
||||||
//simple destructor check in the end, just look for memleaks, then it didnt clear the AABB structure
|
//simple destructor check in the end, just look for memleaks, then it didnt clear the AABB structure
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ void Game::Tick()
|
|||||||
m_Renderer->Update(dt);
|
m_Renderer->Update(dt);
|
||||||
m_EventBroker->Swap();
|
m_EventBroker->Swap();
|
||||||
|
|
||||||
#define TEST2
|
#define TEST1
|
||||||
//this draws the octTree and you can set the cube inside it and see what boxes in the tree that it belongs to
|
//this draws the octTree and you can set the cube inside it and see what boxes in the tree that it belongs to
|
||||||
#ifdef TEST1
|
#ifdef TEST1
|
||||||
if (!m_UpdatedOnce) {
|
if (!m_UpdatedOnce) {
|
||||||
@@ -81,13 +81,13 @@ void Game::Tick()
|
|||||||
//check all children again in the tree if they have a box in them or not, and colormark them if they do
|
//check all children again in the tree if they have a box in them or not, and colormark them if they do
|
||||||
//contentboxarna får man ut - inte childboxarna!
|
//contentboxarna får man ut - inte childboxarna!
|
||||||
std::vector<int> boxIndex;
|
std::vector<int> boxIndex;
|
||||||
boxIndex = m_World->someOctTree.childIndicesContainingBox(boxi);
|
boxIndex = m_World->someOctTree.m_Root->childIndicesContainingBox(boxi);
|
||||||
|
|
||||||
for (auto& oneLinkedObject : m_World->linkOM)
|
for (auto& oneLinkedObject : m_World->linkOM)
|
||||||
{
|
{
|
||||||
ComponentWrapper model = m_World->GetComponent(oneLinkedObject.entId, "Model");
|
ComponentWrapper model = m_World->GetComponent(oneLinkedObject.entId, "Model");
|
||||||
model["Color"] = glm::vec4(1.0f, 1.0f, 1.0f, 1.0f);
|
model["Color"] = glm::vec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
if (oneLinkedObject.child->m_DynamicObjects.size() != 0) {
|
if (oneLinkedObject.child->m_DynamicObjIndices.size() != 0) {
|
||||||
model["Color"] = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
model["Color"] = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ void Game::Tick()
|
|||||||
//REQUIRED: childIndicesContainingBox must be public to test this!
|
//REQUIRED: childIndicesContainingBox must be public to test this!
|
||||||
for each (auto someBoxIndex in boxIndex)
|
for each (auto someBoxIndex in boxIndex)
|
||||||
{
|
{
|
||||||
glm::vec3 pos = m_World->someOctTree.m_Children[someBoxIndex]->m_Box.Center();
|
glm::vec3 pos = m_World->someOctTree.m_Root->m_Children[someBoxIndex]->m_Box.Center();
|
||||||
if (abs(pos.x - oneLinkedObject.posxyz.x) < 0.005f &&
|
if (abs(pos.x - oneLinkedObject.posxyz.x) < 0.005f &&
|
||||||
abs(pos.y - oneLinkedObject.posxyz.y) < 0.005f &&
|
abs(pos.y - oneLinkedObject.posxyz.y) < 0.005f &&
|
||||||
abs(pos.z - oneLinkedObject.posxyz.z) < 0.005f) {
|
abs(pos.z - oneLinkedObject.posxyz.z) < 0.005f) {
|
||||||
@@ -122,7 +122,7 @@ void Game::Tick()
|
|||||||
aabb.CreateFromCenter(glm::vec3(0, 2.0f, 0.0f), glm::vec3(1.0f, 1.0f, 1.0f));
|
aabb.CreateFromCenter(glm::vec3(0, 2.0f, 0.0f), glm::vec3(1.0f, 1.0f, 1.0f));
|
||||||
|
|
||||||
if (m_UpdatedOnce) {
|
if (m_UpdatedOnce) {
|
||||||
auto test = someOctTree.childIndicesContainingBox(aabb);
|
//auto test = someOctTree.childIndicesContainingBox(aabb);
|
||||||
std::vector<AABB> test2;
|
std::vector<AABB> test2;
|
||||||
someOctTree.BoxesInSameRegion(aabb, test2);
|
someOctTree.BoxesInSameRegion(aabb, test2);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,9 +15,9 @@ class HardcodedTestWorld : public World
|
|||||||
public:
|
public:
|
||||||
struct LinkOctTreeAndModel {
|
struct LinkOctTreeAndModel {
|
||||||
EntityID entId;
|
EntityID entId;
|
||||||
OctTree* child;
|
OctTree::OctChild* child;
|
||||||
glm::vec3 posxyz;
|
glm::vec3 posxyz;
|
||||||
LinkOctTreeAndModel(EntityID eId, OctTree* ch, glm::vec3 pos)
|
LinkOctTreeAndModel(EntityID eId, OctTree::OctChild* ch, glm::vec3 pos)
|
||||||
{
|
{
|
||||||
entId = eId;
|
entId = eId;
|
||||||
child = ch;
|
child = ch;
|
||||||
@@ -76,7 +76,7 @@ private:
|
|||||||
auto someAABB = AABB(glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(1.0f, 1.0f, 1.0f));
|
auto someAABB = AABB(glm::vec3(0.0f, 0.0f, 0.0f), glm::vec3(1.0f, 1.0f, 1.0f));
|
||||||
|
|
||||||
//draw main box first
|
//draw main box first
|
||||||
AddBoxModel(someAABB.Center(), someAABB.HalfSize().x, &someOctTree, tempId);
|
AddBoxModel(someAABB.Center(), someAABB.HalfSize().x, someOctTree.m_Root, tempId);
|
||||||
|
|
||||||
//add anotherbox in octTree
|
//add anotherbox in octTree
|
||||||
auto anotherBox = AABB(glm::vec3(0.1f, 0.1f, 0.1f), glm::vec3(0.2f, 0.2f, 0.2f));
|
auto anotherBox = AABB(glm::vec3(0.1f, 0.1f, 0.1f), glm::vec3(0.2f, 0.2f, 0.2f));
|
||||||
@@ -84,15 +84,15 @@ private:
|
|||||||
someOctTree.AddDynamicObject(anotherBox);
|
someOctTree.AddDynamicObject(anotherBox);
|
||||||
|
|
||||||
//draw anotherbox and save it in anotherBoxTransformId
|
//draw anotherbox and save it in anotherBoxTransformId
|
||||||
AddBoxModel(anotherBox.Center(), anotherBox.HalfSize().x, &someOctTree, anotherBoxTransformId);
|
AddBoxModel(anotherBox.Center(), anotherBox.HalfSize().x, someOctTree.m_Root, anotherBoxTransformId);
|
||||||
|
|
||||||
//draw the octTree
|
//draw the octTree
|
||||||
for (size_t j = 0; j < 8; j++)
|
for (size_t j = 0; j < 8; j++)
|
||||||
{
|
{
|
||||||
AddBoxModel(someOctTree.m_Children[j]->m_Box.Center(),
|
AddBoxModel(someOctTree.m_Root->m_Children[j]->m_Box.Center(),
|
||||||
someOctTree.m_Children[j]->m_Box.HalfSize().x, someOctTree.m_Children[j], tempId);
|
someOctTree.m_Root->m_Children[j]->m_Box.HalfSize().x, someOctTree.m_Root->m_Children[j], tempId);
|
||||||
|
|
||||||
auto someChild = someOctTree.m_Children[j];
|
auto someChild = someOctTree.m_Root->m_Children[j];
|
||||||
|
|
||||||
for (size_t i = 0; i < 8; i++)
|
for (size_t i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
@@ -103,24 +103,6 @@ private:
|
|||||||
}
|
}
|
||||||
}//end CreateEnt
|
}//end CreateEnt
|
||||||
|
|
||||||
void AddBoxModel(const glm::vec3 ¢er, const float &halfSize, OctTree* child, EntityID &outEntityId) {
|
|
||||||
World& world = *this;
|
|
||||||
|
|
||||||
EntityID entityDummyScene = world.CreateEntity();
|
|
||||||
outEntityId = entityDummyScene;
|
|
||||||
ComponentWrapper transform = world.AttachComponent(entityDummyScene, "Transform");
|
|
||||||
transform["Position"] = center;
|
|
||||||
transform["Scale"] = glm::vec3(1.0f, 1.0f, 1.0f)*halfSize*2.0f*0.97f;
|
|
||||||
ComponentWrapper model = world.AttachComponent(entityDummyScene, "Model");
|
|
||||||
model["Resource"] = "Models/Core/UnitBox.obj";
|
|
||||||
model["Color"] = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
|
||||||
if (child->m_DynamicObjects.size() != 0)
|
|
||||||
model["Color"] = glm::vec4(1.0f, 1.0f, 1.0f, 1.0f);
|
|
||||||
|
|
||||||
linkOM.emplace_back(entityDummyScene, child, center);
|
|
||||||
//extra
|
|
||||||
//allModels.push_back(model);
|
|
||||||
}
|
|
||||||
void createTestEntitiesTest2()
|
void createTestEntitiesTest2()
|
||||||
{
|
{
|
||||||
World& world = *this;
|
World& world = *this;
|
||||||
@@ -131,4 +113,21 @@ private:
|
|||||||
ComponentWrapper model = world.AttachComponent(entityCollisionBox, "Model");
|
ComponentWrapper model = world.AttachComponent(entityCollisionBox, "Model");
|
||||||
model["Resource"] = "Models/Core/UnitBox.obj";
|
model["Resource"] = "Models/Core/UnitBox.obj";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AddBoxModel(const glm::vec3 ¢er, const float &halfSize, OctTree::OctChild* child, EntityID &outEntityId) {
|
||||||
|
World& world = *this;
|
||||||
|
|
||||||
|
EntityID entityDummyScene = world.CreateEntity();
|
||||||
|
outEntityId = entityDummyScene;
|
||||||
|
ComponentWrapper transform = world.AttachComponent(entityDummyScene, "Transform");
|
||||||
|
transform["Position"] = center;
|
||||||
|
transform["Scale"] = glm::vec3(1.0f, 1.0f, 1.0f)*halfSize*2.0f*0.97f;
|
||||||
|
ComponentWrapper model = world.AttachComponent(entityDummyScene, "Model");
|
||||||
|
model["Resource"] = "Models/Core/UnitBox.obj";
|
||||||
|
model["Color"] = glm::vec4(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
|
if (child->m_DynamicObjIndices.size() != 0)
|
||||||
|
model["Color"] = glm::vec4(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
|
||||||
|
linkOM.emplace_back(entityDummyScene, child, center);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
Reference in New Issue
Block a user