From 782711787479f4d15bb437601a8d5445e7024857 Mon Sep 17 00:00:00 2001 From: Peter Schaefer Date: Tue, 19 May 2015 18:52:26 +0200 Subject: [PATCH] fixed wrong BBox center and size bug (Box class) --- Weave/Graphix/Model/IMesh.cpp | 4 ++-- Weave/Graphix/Model/IMesh.h | 2 -- Weave/Graphix/Model/IMetaMesh.cpp | 14 +++++++------- Weave/Graphix/Model/Model.cpp | 13 +++++++++---- Weave/Graphix/Model/Model.h | 3 ++- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/Weave/Graphix/Model/IMesh.cpp b/Weave/Graphix/Model/IMesh.cpp index f930a88..c76ae16 100644 --- a/Weave/Graphix/Model/IMesh.cpp +++ b/Weave/Graphix/Model/IMesh.cpp @@ -402,7 +402,7 @@ Node* IMesh::buildMeshTree(const mat4& modelMat, const uint& numvertices, const } -Node::Node(Triangle* tri) : element(tri), lNode(nullptr), uNode(nullptr), splitDim(-1) +Node::Node(Triangle* tri) : element(tri), lNode(nullptr), uNode(nullptr) { mean = element->getMean(); element->getBBmm(min, max); @@ -416,7 +416,7 @@ Node::Node(Triangle* tri) : element(tri), lNode(nullptr), uNode(nullptr), splitD //} Node::Node(const vec3& _min, const vec3& _max, Node* _lower, Node* _upper) - : element(nullptr), lNode(_lower), uNode(_upper), splitDim(-1), center((_min + _max) / 2.f), size((_max - _min) / 2.f), min(_min), max(_max) + : element(nullptr), lNode(_lower), uNode(_upper), center((_min + _max) / 2.f), size((_max - _min) / 2.f), min(_min), max(_max) { } diff --git a/Weave/Graphix/Model/IMesh.h b/Weave/Graphix/Model/IMesh.h index 6a3b320..4960e5b 100644 --- a/Weave/Graphix/Model/IMesh.h +++ b/Weave/Graphix/Model/IMesh.h @@ -70,8 +70,6 @@ public: Node *lNode, *uNode; Model::Triangle *element; - - int splitDim; }; protected: diff --git a/Weave/Graphix/Model/IMetaMesh.cpp b/Weave/Graphix/Model/IMetaMesh.cpp index 484cf03..f7f4018 100644 --- a/Weave/Graphix/Model/IMetaMesh.cpp +++ b/Weave/Graphix/Model/IMetaMesh.cpp @@ -33,15 +33,15 @@ IMetaMesh::IMetaMesh(const string& _modelpath) : modelpath(_modelpath) mat4 tmpModelMat; //vec3 BBmin, BBmax, tmpMin, tmpMax; - //aimat = &(root->mChildren[0]->mTransformation); + aimat = &(root->mChildren[0]->mTransformation); - //tmpModelMat = mat4(aimat->a1, aimat->c1, -aimat->b1, aimat->d1, aimat->a2, aimat->c2, -aimat->b2, aimat->d2, aimat->a3, aimat->c3, -aimat->b3, aimat->d3, aimat->a4, aimat->c4, -aimat->b4, aimat->d4); + tmpModelMat = mat4(aimat->a1, aimat->c1, -aimat->b1, aimat->d1, aimat->a2, aimat->c2, -aimat->b2, aimat->d2, aimat->a3, aimat->c3, -aimat->b3, aimat->d3, aimat->a4, aimat->c4, -aimat->b4, aimat->d4); - //tmpIMesh = new IMesh(scene->mMeshes[0], tmpModelMat); - //models.push_back(tmpIMesh); - //tmpIMesh->getBBmm(BBmin, BBmax); + tmpIMesh = new IMesh(scene->mMeshes[0], tmpModelMat); + models.push_back(tmpIMesh); + setBB(tmpIMesh->getBBox()); - for (uint i = 0; i < scene->mNumMeshes; i++) + for (uint i = 1; i < scene->mNumMeshes; i++) { aimat = &(root->mChildren[i]->mTransformation); @@ -95,7 +95,7 @@ void IMetaMesh::drawModel(Shader* _shader, Texture* _texture, const mat4& _model void IMetaMesh::drawBBox(const mat4& _modelMat,const vec4& _color) const { - Model::drawBBox(_modelMat, vec4(0.f,.9f,.9f,1.f)); +// Model::drawBBox(_modelMat, vec4(0.f,.3f,.9f,1.f)); if (models.size() == 1) models.front()->drawBBox(_modelMat, _color); else diff --git a/Weave/Graphix/Model/Model.cpp b/Weave/Graphix/Model/Model.cpp index 965068c..1aaf5db 100644 --- a/Weave/Graphix/Model/Model.cpp +++ b/Weave/Graphix/Model/Model.cpp @@ -120,6 +120,10 @@ void Model::drawBBox(const mat4& _modelMat, const vec4& _color) const getBBoxModel()->drawModel(Graphix::shader_BBox, NULL, _modelMat*translate(box.center())*glm::scale(box.size()*2.f)); } +void Model::setBB(const Box& _box) +{ + box = _box; +} void Model::setBB(const vec3& _min, const vec3& _max) { @@ -643,9 +647,9 @@ Box::Box(const vec3& _center, const vec3& _size) : cen(_center), siz(_size) { } -Box::Box(const Box& _box) : cen(_box.cen), siz(_box.siz) -{ -} +//Box::Box(const Box& _box) : cen(_box.cen), siz(_box.siz) +//{ +//} Box::~Box() { @@ -672,6 +676,7 @@ Box Box::merge(const Box& _boxA, const Box& _boxB) vec3 diff = _boxB.cen - _boxA.cen; vec3 size; vec3 center; + for (int i = 0; i<3; ++i) { if (abs(_boxA.siz[i] - _boxB.siz[i]) - abs(diff[i]) >= 0) @@ -690,7 +695,7 @@ Box Box::merge(const Box& _boxA, const Box& _boxB) else { size[i] = (_boxA.siz[i] + _boxB.siz[i] + abs(diff[i])) * .5f; - center[i] = _boxA.cen[i] - sign(diff[i]) * _boxA.siz[i] - size[i]; + center[i] = _boxA.cen[i] - sign(diff[i]) * (_boxA.siz[i] - size[i]); } } diff --git a/Weave/Graphix/Model/Model.h b/Weave/Graphix/Model/Model.h index fa47587..d8aa9f4 100644 --- a/Weave/Graphix/Model/Model.h +++ b/Weave/Graphix/Model/Model.h @@ -82,7 +82,7 @@ public: { public: Box(); - Box(const Box& box); + //Box(const Box& box); Box(const vec3& center, const vec3& size); ~Box(); @@ -111,6 +111,7 @@ protected: std::unordered_map shader_map; + void setBB(const Box& box); void setBB(const vec3& min, const vec3& max); void setBB(const uint numvertices, const float* vertices); void setBB(const uint numvertices, const float* vertices, const mat4& modelMat); -- 2.47.3