** Everything I did for this course was done from scratch*

## Bounding Volumes

The goal of this assignment was to compute the BV that fits any 3D model the user will import.

In this video you can see:

**AABB**(axis-aligned bounding box) and**BS**(bounding sphere) bounding volumes.- BS computed using
**centroid**,**ritter**or**iterative**computation method. - How this works for
**different shapes**.

## Bounding Volume Hierarchy

In this assignment we had to use the previously implemented BVs to construct a hierarchical tree that will contain the objects in the scene.

In this video you can see:

- The
**whole tree**at once. - The
**levels**of the trees one by one. - How the tree
**updates on runtime**when objects move. - Difference when constructing the tree with different methods (
**top-bottom, bottom-up and insertion**).

## Octree / K-d Tree

Once we understood the most basic hierarchical tree, we moved to more complex space partitioning trees. We started with the **octrees**, where each internal node has exactly eight children, this is, each level gets subdivided eight times.

In the video you can see:

- The
**levels**of the tree one by one. - The whole tree at once.

We also had the chance to implement a **K-d tree**, where the level is divided along the axis with the widest spread through the middle of the points contained in it.

In the video you can see:

- The
**levels**of the tree one by one.

## Collisions

Doesn’t make much sense having the knowledge and ability to divide the space if you are not giving a usage to it. For solving this problem, our last assignment was about implementing an **optimized collision detection system** by using the space-partition tree of our choice, which in my case is a octree.

In the video you can see:

- How the octree gets
**updated on runtime**when position of objects changes. - The phases when two
**BVs collide**(orange) and when two**shapes collide**(red).