}
-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);
//}
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)
{
}
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);
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
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)
{
{
}
-Box::Box(const Box& _box) : cen(_box.cen), siz(_box.siz)
-{
-}
+//Box::Box(const Box& _box) : cen(_box.cen), siz(_box.siz)
+//{
+//}
Box::~Box()
{
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)
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]);
}
}
{
public:
Box();
- Box(const Box& box);
+ //Box(const Box& box);
Box(const vec3& center, const vec3& size);
~Box();
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);