Mini Minecraft
C++ / OpenGL / GLSL / QT
For the final project of my graduate-level graphics course CIS 5600: Interactive Computer Graphics, I collaborated with my classmates Cindy Xu and Hansen Yi on "Mini Minecraft," a miniature version of the popular computer game, Minecraft. Our game featured various features and biomes, such as Redstone Canyons, Tropical Islands, and a Hot Spring!
​
My responsibilities included:
-
Multithreading/Efficient Terrain Generation​​​
-
In order to make terrain generation more efficient, I broke the terrain into multiple smaller "chunks" of blocks so that it would be rendered on a per-chunk basis rather than a per-block basis. To further decrease gameplay lag, I generate chunks only when the player is within a certain distance away and utilized multithreading so that multiple expensive FBM noise functions used to determine the terrain's heightfield could run simultaneously, thereby generating several chunks at a time. In order to handle the expensive VBO generation caused by the large quantity of textures added to the game, I stored chunk VBO data as a set of vectors that would be concurrently generated. Once both a chunk's FBM function and VBO data were calculated via its associated worker threads, I sent data from the main thread to the GPU so that the scene could be rendered. ​
-
-
2D L-systems
-
Using 2D L-systems, I procedurally generated branching rivers that carved themselves out of the surface terrain. ​This helped to create interesting biomes in the game.
-
-
Procedurally generated and placed assets
-
I created assets such as trees and flowers and procedurally placed them in a various biomes, such as a generated cherry and wisteria blossom forest biome, using various FBM noise functions. ​
-
-
Inventory system and onscreen GUI
-
I implemented an inventory system that would allow the player to collect blocks by breaking them and select which type of block they will place via an onscreen GUI. Players can break blocks and add them to their inventory by left-clicking on the screen, and add a new block to the terrain by right-clicking. Furthermore, I implemented an onscreen reticle display in order to aid players during gameplay.
-