MiniMinecraft

The final project for Interactive Computer Graphics, taught at UPenn by Adam Mally.
Worked with Ricky Rajani and Emily Vo

MiniMinecraft is an interactive 3D world exploration and alteration program in the style of the popular computer game Minecraft. We built in QT Creator and coded in C++, with shaders in OpenGL.The scope of the project gave us a lot of range to pursue implementing custom features. My contributions to the project were render optimizations for our voxelized world, and shadow mapping, as well as improvements to the physics and game play I made after the semester had ended.

Shadow Mapping

As a custom feature, I implemented shadow mapping using an additional render pass from the light direction. The initial shadow pass is a z-depth render from an orthogonal camera. When fragments are rendered from the players camera perspective, a distance comparison with the z-depth pass can inform us whether or not that fragment is in shadow, relative to our approximate sunlight.

Expanding Terrain and Optimized Terrain Storage

Procedurally generated terrain (kudos to Ricky Rajani), is generated in real-time as the player moves beyond the bounds of the initial scene. We store the voxel terrain of the environment as 16x16x16 chunk, each of which is drawn using a single vertex buffer object of interleaved vertex attributes. Faces not on the “hull” of the terrain are not rendered, nor are chunks very far from the player camera.

Interactive Controls

The Player can interact with the voxelized world. I implemented basic collision detection physics and camera controls to form the basis for movement in the environment. (Note as well the environment editing feature implemented by Emily)