I’ve always been intrigued by graphics, and in my free time throughout high school, I studied OpenGL. After countless hours of just trying to get anything to draw on the screen, I slowly started to grasp the very basics of graphics programming. Being able to code is one thing, but for me, actually seeing my code come to life visually makes all of the trials and tribulations worth it.

Over the years, I created many iterations of basic graphics programs, each getting slightly more efficient than the last. So when it came time for the final project of my Graphics 2 course, I was extremely excited to apply all of the latest techniques I’d learned throughout the semester.

Description

The graphics final had us working in pairs. My friend, Karim, and I decided to take on the challenge of revamping an older program of mine. Our goal was to add as many new things we’d learned in the little time we had. After struggling to come up with a name for the first few days of development, we finally decided to combine our names—and the Andrick Engine was born.

Development

Andrick Engine is a bare-bones graphics application that was meant to showcase some of the things we’d learned throughout the semester. The libraries used in the program include the following:

Libraries

  • GLFW3
  • OpenGL rendering
  • Spdlog for logging/debugging
  • GLM for math help
  • STB_Image for image conversion

Features

  • Options/key-remapping settings file
  • Event system
  • File system
  • Basic memory tracking to detect memory leaks
  • Flying camera system
  • Model loading/rendering and child object/transform support

New Features Implemented during the Semester

  • FBO, and RBO wrapper objects for OpenGL
  • MSAA, vsync, and other post-processing support
  • Screen resizing, double buffering, and dynamic buffer resizing
  • Phong, Pom, Texture, Julia Fractal, and Mandelbrot shaders

I worked on all of these systems and more, over five weeks. I focused mainly on the FBO and RBO wrappers, MSAA, vsync, and post-processing, double buffering, screen resizing, and dynamic buffer resizing. Together, Karim and I both worked closely together to create the Phong, Pom, and Texture shaders, while Karim focused mainly on generating the Julia and Mandelbrot shaders.

Pictures

Playable Download

If you would like to download the demo and play it for yourself, here is a playable version for Windows computers. To play, make sure to extract the zip file before running the executable.

Otherwise, I have created a video showing off the demo:

Graphics 2 Final Showcase
Graphics 2 Final Demo