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
}
//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;
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;
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:
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;
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();