The final project for my Computer Graphics class in December 2017 was to build a less feature-rich version of Minecraft in C++. I worked with two other students, and I personally implemented the game engine and player physics, texturing (with OpenGL), the inventory system, and procedurally-placed trees.
The player physics implement gravity and collisions, which use ray casting to check if the player is in contact with surrounding surfaces. I also built the game engine, which updates at 60 frames per second.
I implemented texturing using OpenGL and GLSL shaders. I used ten different official Minecraft textures, and made sure to support transparency and animation for the lava and water. Different textures have different Blinn-Phong specularity to reflect their different material types.
I created an inventory system and player HUD, again using the official Minecraft textures for the GUI. When a player breaks blocks, they are added to the inventory, and when the player places them, they are expended. I also added a “creative” inventory mode that gives the player an unlimited number of all types of blocks.
Finally, I added procedurally-placed assets. I created a tree primitive and used a randomly-offset grid to place each tree. The height of the trees was determined by the fractal Brownian noise function that one of my group members had implemented for terrain generation.