split method

void split(
  1. int level
)

Implementation

void split(int level){
  List<OctreeNode> _subTrees = [];
  Vector3 halfsize = _v2..setFrom(box.max)..sub(box.min)..scale(0.5);

  for (int x = 0; x < 2; x ++ ) {
    for (int y = 0; y < 2; y ++ ) {
      for (int z = 0; z < 2; z ++ ) {
        AABB _box = AABB();
        final Vector3 v = _v1..setValues(x.toDouble(), y.toDouble(), z.toDouble());
        _box.min = _box.min..setFrom(box.min)..add(v..multiply(halfsize));
        _box.max = _box.max..setFrom(_box.min)..add(halfsize);
        _subTrees.add(OctreeNode(_box.clone()));
      }
    }
  }

  while(triangles.isNotEmpty){
    Triangle triangle = triangles.removeLast();
    for (int i = 0; i < _subTrees.length; i ++ ) {
      if(_subTrees[i].box.intersectsTriangle(triangle)){
        _subTrees[i].triangles.add(triangle);
      }
    }
  }

  for (int i = 0; i < _subTrees.length; i ++ ) {
    int len = _subTrees[i].triangles.length;
    if (len > 8 && level < 16) {
      _subTrees[i].split(level + 1);
    }
    if ( len != 0 ) {
      subTrees.add(_subTrees[i]);
    }
  }
}