From 3416aca55fe73af2d1ef2643e26ae5cfe10636c9 Mon Sep 17 00:00:00 2001 From: Peter Schaefer Date: Sat, 2 May 2015 10:29:02 +0200 Subject: [PATCH] fixed BBox Kollision (real BBox distance!) --- Weave/Graphix/Model/Model.cpp | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/Weave/Graphix/Model/Model.cpp b/Weave/Graphix/Model/Model.cpp index 7faa651..d13f0dd 100644 --- a/Weave/Graphix/Model/Model.cpp +++ b/Weave/Graphix/Model/Model.cpp @@ -256,24 +256,30 @@ void Model::useMaterial(const vec4& _material, Shader* _shader) const void Model::isColliding(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); - posA = posA + (vec3)(_modelMatThis[3]); //transpose sollte eigentlich reichen - posB = posB + (vec3)(_modelMatOther[3]); + mat4 modelAR = glm::inverse(_modelMatOther)*_modelMatThis; + mat4 modelBR = glm::inverse(_modelMatThis)*_modelMatOther; + + vec3 posAR = (vec3)(modelAR*vec4(posA, 1.f)); + vec3 posBR = (vec3)(modelBR*vec4(posB, 1.f)); sizeA /= 2; sizeB /= 2; - vec3 sizeAR = rotateSize(sizeA, glm::inverse(_modelMatOther)*_modelMatThis); - vec3 sizeBR = rotateSize(sizeB, glm::inverse(_modelMatThis)*_modelMatOther); - - sizeA = rotateSize(sizeA,_modelMatThis); - sizeB = rotateSize(sizeB,_modelMatOther); - + vec3 sizeAR = rotateSize(sizeA, modelAR); + vec3 sizeBR = rotateSize(sizeB, modelBR); - checkCollideByAxis(_overlap, _inside, 3, value_ptr(posA), value_ptr(posB), value_ptr(sizeA), value_ptr(sizeB)); + 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); + } } -- 2.47.3