During my Master's degree at Clemson University, I enrolled in a course called Motion Planning taught by Dr. Ioannis Karamouzas. At the same time, I was enrolled in a studio production for Digital Production Arts, where we were tasked to create a game using Unreal Engine. Part of my role in Research and Development was to explore the AI Agent capabilities within UE, as we wanted to include non-playable assets. With the game being focused on an oceanic adventure, a variety of these assets were aquatic creatures (fish, sharks, etc.). At the time, there was not a configuration nor free plugin that would allow the fish AI to travel within three dimensions. I decided to explore this oppourtunity more and created a test bed application to visualize three dimensional pathfinding using A*.
For this project, I utilized C++ and Legacy OpenGL to develop and visualize the application. The start and end goals are predefined, but as the user, you are able to define the location and radius of objects within the voxel space. I utilized voxel octrees to parse through the voxel space in a computationally effective manner. Once the obstacles have been placed, the user can then define the roadmap and finally activate A* to locate the shortest path from the start to the goal.
- LEFT and RIGHT arrow keys: Rotates the area around on the y-axis so that the user can see the path from multiple angles
- 'O' or 'o': Asks the user to enter a radius, x-location, y-location, and z-location to place obstacles
- 'V' or 'v': Creates the voxel octrees within the play area (NOTE: Can only be done after placing at least one obstacle in the area).
- 'R' or 'r': Creates the roadmap for all the nodes given within the play area and draws the edges yellow.
- 'A' or 'a': Implements A* and shows the best possible path found to get from start to finish
- 'C' or 'c': Clears the voxels, obstacles, and paths so that you can start over.
- 'T' or 't': Toggles the voxels on and off so that you can see the path more clearly.
Make sure that you have OpenGL with GLUT installed before attempting to build the repository.
Once you have clone the repository, go to the directory and run the make command. The executable should then be rendered and you can launch the application with ./main.
- Add Windows and MacOS capabilities to build and execute the repository.
- Extend the final path to interpolate using a spline or bezier curve for a better, more realistic simulation.
- Include animation of an object using the path interpolation to show proof of concept.
- Research further to make the program more computationally efficient.
