int ATOM_AABBTreeBuilder::classifyPrimitive (unsigned primitive, int axis, float middle, float &minval, float &maxval) { takeMinMax (primitive, axis, minval, maxval); float m = 0.f; const unsigned short *idx = &_extractedIndices[primitive * 3]; //const ATOM_Vector3f &v0 = _vertices[idx[0]]; //const ATOM_Vector3f &v1 = _vertices[idx[1]]; //const ATOM_Vector3f &v2 = _vertices[idx[2]]; m += _vertices[idx[0]][axis]; m += _vertices[idx[1]][axis]; m += _vertices[idx[2]][axis]; m /= 3.f; return (m < middle) ? 0 : 1; }
int AABBTreePolyBuilder::classifyPol(const Polygon &_pol, int _axis, float _middle, float &_min, float &_max) { int i; takeMinMax(_pol, _axis, _min, _max); int nbVerts = _pol.getNbIndices(); float m = 0.0f; for (i = 0; i < nbVerts; i++) { int index = _pol.getIndex(i); Vec3f &pt = tree_->points_[index]; if (_axis == 0) m += pt.x; else if (_axis == 1) m += pt.y; else if (_axis == 2) m += pt.z; } m /= nbVerts; if (m < _middle) return 0; return 1; }