CSCI 441 - Computer Graphics

Fall 2019

|     Home   |   Syllabus  |   Assignments  |   Leaderboard  |   Schedule  |   Resources    |

"Duskdude"

Duskdude banner
Assignment 1 - Hoist Your Sign

The goal of this assignment was to create a crest for my character and display their name using OpenGL triangle primitives. Some of the requirements were to use a 700 by 150 pixel window, use only GL_TRIANGLES, GL_TRIANGLE_STRIP, and GL_TRIANGLE_FAN primitives, and use all of glm::translate(), glm::scale(), and glm::rotate() transforms. To accomplish this, I took a red/black texture and sickles texture and passed them to my LowPoly converter to convert the images to triangle meshes in a file. To read the file and draw the mesh, a bunch of triangle strips are used that are drawn layer by layer. After that I added the text by encoding characters in an array to then draw them to the screen, and added a triangle fan for the shield that the sickles are placed on.

Duskdude with triforce Duskdude
Assignment 2 - Employee of the Month

In this next assignment, the task was to create an interactive hero that reacted to mouse and keyboard input from the user. The hero was to move around the screen and allowed to visit different scenes that were made in the lab prior to this. To get the animation of the hero to work, I used an oscillating value that was tied to the character velocity and controlled arm/leg position. I also added the ability to switch between sickle and shotgun weapons, sprinting when a key is held, and making the shotgun shoot a spread of bullets on a mouse click.

Desert map with player Player blasts a zombie to smithereens
Side Quest 1 - All Your Base Are Belong to Us

This was an optional assignment where the goal was to build any videogame with the animation and rendering techniques covered so far in the course. To stick with the "Dusk"/"Doom" theme I've been going with on the projects, I immediately decided to make some sort of top-down shooter game like Brutal MooD or something similar. I later realized that this would be a bit too much work given the time I had to make this so I made a wave-based zombie shooter instead. The completed game has fully animated zombies and player actions and features random item drops, a rare zombie varient, and a bunch of other neat mechanics to add to the gameplay. In the images below, you can see the player taking out some zombies with style.

Bus on a light cruise through the city The drivers view in the bus
Assignment 3 - Enter the Park

This assignment was all about making a simple 3D model of a "People Mover" to move people throughout the theme park. The bus in this case moves around with the WASD keys and features an arcball camera the user can use to look around (controlled with the mouse). The wheels on the bus also rotate as it moves and the teapot spins on top (why? so it can deliver refreshments to people nearby of course). To show the bus position in the city, a minimap is drawn in the corner using a fancy technique with GL_SCISSOR_TEST to clear only a part of the render buffer. Also included is an option to switch to first-person view which is shown in the second picture.

Bus with faery
Assignment 4 - Sell Out

This assignment left off from the previous one where a bus was driving though a city. The new additions are a bezier curve and control points that are input from a file and a faery that travels around the curve. The faery's wings move as it flies and using some trigonometry, it also rotates in the direction of travel. To fix some problems with the faery's speed changing along the path, the t-value that controls the faery position on the curve gets normalized so that there is a constant speed no matter the shape of the curve.

The park A hero in a cart
Assignment MP - Roller Coaster Tycoon

In this assignment, the goal was to build the theme park complete with a curved surface ground (bezier patch), buildings and trees, a track for the roller coaster, and interactive heros in the scene. This was also a team effort between myself, Derek Foundoulis, and Dylan Cole. To load all of our objects into the scene we added a file that specified the locations of buildings, trees, and control points for the surface and the track. We also made the bus able to drive along the curved surface and placed the other heros in the roller coaster carts. Some camera options let the user select which hero to view and choose between arcball, free cam, and first-person camera modes.

Fireworks and rain cloud
Assignment 6 - The Fireworks Show

This assignment demonstrated the use of particle systems. In the scene a skybox is drawn along with a metal platform for reference and some fireworks and clouds. The particle systems are loaded from a control file that is passed into the program and is used to specify type of system, position, velocity of particles, etc. The particles are all managed in one VAO object and sorted by distance before getting drawn to the screen.

Alien landscape
Assignment 7 - Avoid the Park Mascots

For this assignment, the task was to create a simple game with enemies and a player that could move around and interact with the world. The player and enemies needed to have collision checking with objects in the environment and the static scene itself. To do this, I implemented an algorithm to collide triangle meshes against an ellipsoid and used this for all of my collisions. I also added some coins (yellow boxes) in the world that the player could collect, when all of them are collected the game ends and the player wins. The enemies in the world (the aliens) continue to chase the player as they collect the coins and can also climb up surfaces and will even jump if they need to get higher up. If the player touches one of the aliens or falls out of the world, then the game restarts.

Main menu Castle scene
Assignment FP - The Grand (Re)Opening

This is the final project assignment I worked on with Yash Sinha and Calvin Mak. We built an FPS like game similar to Doom and Quake, but with swords instead of guns. The map was drawn in a voxel style with a bunch of "rooms" laid around that were each a collection of VAOs. Collisions from the last assignment were also used to get player and enemy movement around the map. The project also incorporated particle systems, framebuffer drawing for some special effects, and improved enemy AI.