From 6c894c71f58daf56caa13fc53d30ab3f3a5e0a3c Mon Sep 17 00:00:00 2001 From: Peter Schaefer Date: Thu, 7 May 2015 12:44:58 +0200 Subject: [PATCH] first cleanup for collides --- Weave/Graphix/Model/IMesh.cpp | 22 +++++++++++++----- Weave/Graphix/Model/IMesh.h | 4 ++-- Weave/Graphix/Model/IMetaMesh.cpp | 19 ---------------- Weave/Graphix/Model/IMetaMesh.h | 3 --- Weave/Graphix/Model/Model.cpp | 37 ------------------------------- Weave/Graphix/Model/Model.h | 1 - 6 files changed, 19 insertions(+), 67 deletions(-) diff --git a/Weave/Graphix/Model/IMesh.cpp b/Weave/Graphix/Model/IMesh.cpp index de00367..bb20144 100644 --- a/Weave/Graphix/Model/IMesh.cpp +++ b/Weave/Graphix/Model/IMesh.cpp @@ -139,13 +139,25 @@ bool IMesh::import(const aiMesh* mesh, uint& numvertices, uint& numfaces, float* return true; } -void IMesh::checkColliding(float& _overlap, float& _inside, const Model* _model, const mat4& _modelMatThis, const mat4& _modelMatOther) const +Overlap IMesh::checkColS2O(const mat4& _mMat, const Model* _model, const mat4& _modelMat) const { - Model::checkColliding(_overlap, _inside, _model, _modelMatThis*modelMat, _modelMatOther); - /* nicht überschneidend also keine weiteren Tests nötig */ - if (_overlap < 0) - return; + //Outer BBox + Overlap firstBB = Model::checkColS2O(_mMat, _model, _modelMat); + //if (!firstBB) + return firstBB; + //Inner Mesh + +} + +Overlap IMesh::checkColO2SBox(const mat4& _mMat, const vec3& _pos, const vec3& _size, const mat4& _modelMat) const +{ + //Outer Mesh + Overlap firstBB = Model::checkColO2SBox(_mMat, _pos, _size, _modelMat); + //if (!firstBB) + return firstBB; + + //Inner Mesh } diff --git a/Weave/Graphix/Model/IMesh.h b/Weave/Graphix/Model/IMesh.h index 43451d4..155b867 100644 --- a/Weave/Graphix/Model/IMesh.h +++ b/Weave/Graphix/Model/IMesh.h @@ -23,8 +23,8 @@ public: //void bindShader(Shader* shader); - /* calls Colliding to check if self collides with model*/ - virtual void checkColliding(float& overlap, float& inside, const Model* model, const mat4& modelMatThis, const mat4& modelMatOther) const; + Overlap checkColS2O(const mat4& mMat, const Model* model, const mat4& modelMat) const override; + Overlap checkColO2SBox(const mat4& mMat, const vec3& pos, const vec3& size, const mat4& modelMat) const override; operator std::string() const override; diff --git a/Weave/Graphix/Model/IMetaMesh.cpp b/Weave/Graphix/Model/IMetaMesh.cpp index 155502a..052b1b4 100644 --- a/Weave/Graphix/Model/IMetaMesh.cpp +++ b/Weave/Graphix/Model/IMetaMesh.cpp @@ -144,25 +144,6 @@ Overlap IMetaMesh::checkColO2SBox(const mat4& _mMat, const vec3& _pos, const vec return secondSubBB; } -//void checkColliding(float& _overlap, float& _inside, const Model* _model, const mat4& _modelMatThis, const mat4& _modelMatOther) const -//{ -// Model::checkColliding(_overlap, _inside, _model, _modelMatThis, _modelMatOther); -// -// if (min(_overlap, _inside) >= 0) -// { -// _overlap = -1; _inside = -1; -// float subOverlap = -1, subInside = -1; -// for (auto i = models.begin(); i != models.end(); ++i) -// { -// _model->checkColliding(subOverlap, subInside, *i, _modelMatThis, _modelMatOther); -// if (subOverlap > _overlap) -// _overlap = subOverlap; -// if (subInside > _inside) -// _inside = subInside; -// } -// } -//} - IMetaMesh::operator string() const { return modelpath; diff --git a/Weave/Graphix/Model/IMetaMesh.h b/Weave/Graphix/Model/IMetaMesh.h index 60aafa6..8cedb25 100644 --- a/Weave/Graphix/Model/IMetaMesh.h +++ b/Weave/Graphix/Model/IMetaMesh.h @@ -25,9 +25,6 @@ public: Overlap checkColS2O(const mat4& mMat, const Model* model, const mat4& modelMat) const override; Overlap checkColO2SBox(const mat4& mMat, const vec3& pos, const vec3& size, const mat4& modelMat) const override; - /* calls Colliding to check if self collides with model*/ -// void checkColliding(float& overlap, float& inside, const Model* model, const mat4& modelMatThis, const mat4& modelMatOther) const; - operator std::string() const override; protected: diff --git a/Weave/Graphix/Model/Model.cpp b/Weave/Graphix/Model/Model.cpp index 8f29e3e..a47d7dd 100644 --- a/Weave/Graphix/Model/Model.cpp +++ b/Weave/Graphix/Model/Model.cpp @@ -319,43 +319,6 @@ Overlap Model::checkColO2SBox(const mat4& _mMat, const vec3& _posB, const vec3& return ret; } -void Model::checkColliding(float& _overlap, float& _inside, const Model* _model, const mat4& _modelMatThis, const mat4& _modelMatOther) const -{ - vec3 posA, sizeA, posB, sizeB; - float overlap, inside; - - getBBsp(sizeA, posA); - _model->getBBsp(sizeB, posB); - - mat4 modelAR = glm::inverse(removeScale(_modelMatOther))*_modelMatThis; - mat4 modelBR = glm::inverse(removeScale(_modelMatThis))*_modelMatOther; - - vec3 posAR = (vec3)(modelAR*vec4(posA, 1.f)); - vec3 posBR = (vec3)(modelBR*vec4(posB, 1.f)); - - vec3 sizeAR = rotateSize(sizeA, modelAR); - vec3 sizeBR = rotateSize(sizeB, modelBR); - - vec3 scaleA = getScale(_modelMatThis); - vec3 scaleB = getScale(_modelMatOther); - - scaleVec3(posA, scaleA); - scaleVec3(posB, scaleB); - - scaleVec3(sizeA, scaleA); - scaleVec3(sizeB, scaleB); - - - checkCollideByAxis(_overlap, _inside, 3, value_ptr(posAR), value_ptr(posB), value_ptr(sizeAR), value_ptr(sizeB)); - if (_overlap >= 0) - { - checkCollideByAxis(overlap, inside, 3, value_ptr(posA), value_ptr(posBR), value_ptr(sizeA), value_ptr(sizeBR)); - _overlap = min(overlap, _overlap); - _inside = min(overlap, _inside); - } - -} - void Model::checkCollideByAxis(float& _overlap, float& _inside, uint dim, const float* posA, const float* posB, const float* sizeA,const float* sizeB) { _overlap = INFINITY; diff --git a/Weave/Graphix/Model/Model.h b/Weave/Graphix/Model/Model.h index 3793e0f..5d9f581 100644 --- a/Weave/Graphix/Model/Model.h +++ b/Weave/Graphix/Model/Model.h @@ -38,7 +38,6 @@ public: virtual Overlap checkColS2O(const mat4& mMat, const Model* model, const mat4& modelMat) const; virtual Overlap checkColO2SBox(const mat4& mMat, const vec3& pos, const vec3& size, const mat4& modelMat) const; //virtual void checkColO2STriangle() const; - virtual void checkColliding(float& overlap, float& inside, const Model* model, const mat4& modelMatThis, const mat4& modelMatOther) const; static Model* getBBoxModel(); static Model* getSkyBoxModel(); -- 2.47.3