Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}