This post is a bit late into my process so I'm going to try to be concise with my explanations of the systems.
To answer the question asked in the title: a few months ago I decided to learn how animation systems work and thought about building one from scratch. I quickly realized how naive and misguided I was when I realized that in order to animate something, I had to be able to render it on the screen first; this started my journey into learning OpenGL. I found a good tutorial which has helped me grasp the basic concepts as I designed the engine.
I had some knowledge about Graphics programming from what I had learnt in college (things like uniform buffers, meshes, sprites, shaders etc) but had never built the systems from scratch. I was excited and worried at the same time, excited to learn something new; worried that I would fail in my endeavor and would have nothing to show.
The visual studio solution is separated into a bunch of projects:
I've recently completed the lighting section of the tutorial and looking back at all the systems that I've built in the engine, I think I struggled most with building the Uniform Buffer. There are 2 reasons for this: first, this is something that the tutorial didn't cover and I had to figure out on my own, and second, the std140 memory layout of the uniform buffer follows a 4 byte alignment pattern which means I had to experiment with the way the order of the elements in memory to get the right output. Graphics debugging is quite difficult but RenderDoc has helped me a lot in this process.
In its current state, the engine supports the following features:
Here's a short video of what the current scene looks like
The scene shows a bunch of cubes with diffuse and specular maps applied to them. There is one directional light in the scene, 4 point lights at various places and a spot light on the camera simulating a torch light effect.
I'm going to be continuing with the tutorial and adding additional functionality like loading models from maya, some advanced OpenGL and lighting, and effects like fog.
This whole project started as a precursor to building an animation system, I'm not sure if I'll actually get time to make it but at least I'll have something cool to show off until then.