]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
fixed wrong BBox center and size bug (Box class)
authorPeter Schaefer <schaeferpm@gmail.com>
Tue, 19 May 2015 16:52:26 +0000 (18:52 +0200)
committerPeter Schaefer <schaeferpm@gmail.com>
Tue, 19 May 2015 16:52:26 +0000 (18:52 +0200)
Weave/Graphix/Model/IMesh.cpp
Weave/Graphix/Model/IMesh.h
Weave/Graphix/Model/IMetaMesh.cpp
Weave/Graphix/Model/Model.cpp
Weave/Graphix/Model/Model.h

index f930a883dfdd41a15b6e167ef9a43ab0b0ca1209..c76ae16b50ce50d76d92ac016d472a121e374e2e 100644 (file)
@@ -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)
 {
 }
 
index 6a3b320490694817d9b169bab0a750194c59e44b..4960e5b343dc171a104970a39e55bd2956bec957 100644 (file)
@@ -70,8 +70,6 @@ public:
 
                Node *lNode, *uNode;
                Model::Triangle *element;
-
-               int splitDim;
        };
 
 protected:
index 484cf03003dd6fe98cdc3106d195098f5973edf3..f7f40181b591e95ae2b971b8531544f864ce4bb5 100644 (file)
@@ -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
index 965068c1ce6cbe813cda94e1a499677228f287fb..1aaf5db86fed0613f5dc3c635d8b2fe88208f414 100644 (file)
@@ -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]);
                }
 
        }
index fa475876113819fb231ac9b44f45251a2e5958f4..d8aa9f49198a19842d04a04440020a3d50d3d033 100644 (file)
@@ -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<uint, uint> 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);