I have learned a bit of graphics programming from LearnOpenGL.com as preparation for when I will be developing a fighting game engine.
The render currently supports importing of multiple 3D model formats. It also supports Gouraud and Phong shading, reflection and refraction, postprocessing, instanced rendering, shadow mapping, normal mapping, parallax mapping, deferred rendering and screen space ambient occlusion.
By comparing depth values of our fragment transformed to light space with the value at the same coordinate in our shadow map, we can deduce if a fragment is lit or in shadow.
This is a post-processing effect created by rendering what is in our render buffer to a quad and applying a kernel fragment shader.
By using OpenGL's refract function we can bend our viewing vector with the normals of a surface and sample a pixel of the cube map to use as the color for our fragment.
By using OpenGL's reflect function we can reflect our viewing vector of the normals of a surface and sample a pixel of the cube map to use as the color for our fragment.
Demonstration of instanced rendering. Drawing a total of 100,001 meshes without any hiccups. This is possible because we are using a buffer object to store lots of model matrices. Using indexed rendering we can draw all these objects with one call, transforming points for multiple instances at once
Using a stencil buffer I tried to recreate the effect you see when fighting Omega Zero in MegaMan Zero 3 in 3D.