# GJK

##### C++ DirectX 11 Tech Demo [3D] (2022)

##### 3D Collision Detection

### What Is GJK?

The Gilbert, Johnson and Keerthi algorithm (GJK) is a fast simplex-based algorithm for detecting collision in multiple dimensions.
This project is an implementation of GJK in 3D using DirectX 11 and C++ that illustrates how GJK works with an interactive GUI using ImGui.

### Tell Me More!

The program can determine convex collision for any two objects to a high degree of accuracy while being ran in real-time, making it suitable for 3D games.
This was done as my final year project for Computer Games Programming where I researched many different collision detection algorithms for 3D games.

### What I Learned/Achieved

This project showed me the value of in-depth research into a topic rather than finding the nearest resource in a web
search and stopping there. The project gave me the opportunity to focus exclusively on the algorithm and learn what makes
the majority of 3D collision detection algorithms in terms of mathematics. Additionally, I was able to explore creating an illustration of an
algorithm for the first time. This gave not only educational value to the program but also allowed for visual debugging
during unexpected results. This became very useful when I encountered floating point precision problems during
development.

### What Could Be Improved?

This project is just an interactive demo and GJK could be used in an actual application like a 3D game.
If GJK and the application were separated to make an open-source collision library, it would increase the usefulness of the project.

### Conclusion

My first time doing academic research yielded a neat application showcasing GJK in 3D.