Engine programming
As the final project for an advanced computer graphics course at uni, I developed an engine using OpenGL and C++. It supports PBR shading, deferred rendering and SSAO.
For the physically-based shading, I used the approximations chosen by Brian Karis for UE4's shading model. That is, GGX (Trowbridge-Reitz) for the specular distribution, Schlick's approximation for Fresnel and Schlick-GGX for geometric shadowing.
My implementation of deferred rendering utilizes four buffers for the final light shading: albedo, normals, roughness/metalness/AO packed in RGB and world-space positions.
The SSAO uses a normal-oriented hemisphere sampling and is based on John Chapman's and learnopengl tutorials.
Rasterizer
In the same course, I also implemented a rasterizer (C++), in order to better understand the underlying workings of OpenGL and other graphics APIs.
Below, I compare the rendering of a cow using my rasterizer (Close2GL) and OpenGL. Apart from some minor differences at the borders of the object, the two images generated are visually alike.