CSCI 441 - Computer Graphics

Fall 2016

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

Shuhei, Son of Atlas

Assingment 1 - Adorn Your Temple


This is the first graphics project assignment I have programmed in openGL. It is to represent the banner of the RPG character I have created named Shuhei, in honor of the Playstation first-party president. The theme of the character is playstation thus the logo in the background, the controller buttons across the banner, the D-pad buttons around the 'X', and the playstation gray as the background. Son of Atlas is the nickname of my character, it is my Playstation network name and connects with the overarching theme of Mount Olympus -- Atlas is the Titan holding the world. Although simple, the playstation logo required serious coding work as I wanted it to match identically with the actual logo. To accomplish this I created a Mathematica program to trace the contours of an image I found online which then output an array of points corresponding to points along the border of the logo. From there I manipulated the data to fit a 700 x 150 window size, and in C++ read the data in with more manipulation to display in the correct location without interior lines crossing through the logo. The C++ program used the openGL primitives, color selection, scaling, translation and rotation.

Lab 0 - Map of Your Home World


Shuehei's homeworld, Pallet Town. Although, this digresses from the Playstation theme it is an homage to what sparked my interest in gaming and inevitably computer science. This assingment was an improvement from the last as I had a better idea of how to plan where verticies should go as well as a better understanding of how the openGL functions work.

Assignment 2 - The Sword of a Thousand Truths


This is the Shuehei character model. For this character model, I replicated Wilson from 'Don't Starve'. I thought it was fitting, being a Playstation game as well as my last name. This graphic isn't just simply a character model, the character bobs up and down -- kind of like heaving from lack of breath. The model can shift in all cardinal directions with 'wasd' or the arrow keys, causing a sway in his arms, and when he reaches a border he will wrap around causing a change in the background -- backgrounds are a collection of designs from classmates. Pressing 'q' will exit from the window and right-click will cause the eye brows to frown. Left-click has a torch placed in the spot where the mouse was clicked, another click of the left mouse will ignite the torch (which is animated) and the torch will follow the mouse at this point. An additional left click will put away the torch or pressing 'f' will put the torch/ignited torch away.

Side Quest 1 - All Your Base Are Belong To Us


The purpose of this assingment was to create a game which had animation, accepted keyboard and mouse input, a win condition, a lose condition, and something that stops the player from achieving the win condition. I implemented a rudimentary version of Super Mario Bros from the NES World 1-1. It has most features that you typically associate with Mario -- features were left out due to time constraints. The player is in charge of Luigi and must go through the 1-1 level to reach the end and tear down Bowser's flag. A major learning point for me on this assignment was collision detection and rendering capabilities. I implemented the level as an array, with each block/ object occupying a character in the array. This allowed me to render just what was necessary on the window while still having the map stored in a much more rudimentary sense than OpenGL renderings. The map also helped me implement collision detection, because no 2 characters can occupy one spot of the array at the same time.


Assignment 3 - Oh The Places You'll Go


The purpose of this assignment was to create a "vehicle" which moves around a grid, I chose a hoverboard. There must be some animation while stationary -- the hover disks panning up and down -- and animation while in movement -- the stomp pad on the top compresses during movement and pops back up during quiescent periods. The hover board rotates with the control of the 'a' and 'd' keys and moves forward and backward with 'w' and 's' respectively -- stopping at the edges of the grid with boundary checks. The main screen/ camera focused on the hoverboard is an arc ball camera which can pan clicking and dragging the left mouse and zooms by holding ctrl or 'z' and clicking and dragging the mouse. The secondary view/ camera, located in the top left is a first person view on the hoverboard and as you can see from the second image points directly in front. There are multiple objects littered around the grid, an empty cube and a rock-like formation. Both have radomized locations and are scaled up and down for effect of motion while moving througout the grid.

Lab 3 - Bezier Curve


The lab had us import a file of points, which were established as our control points. The control points are the green spheres, a control cage, in yellow, connects the control points which establish the cage for the Bezier curve, in blue. The program expands for control points of 4+3i. The control points can be shift selected, which then highlights them in red and allows the user to move their coordinates (dx,dy,dz). The change of the control points affects the shape of the Bezier curve -- no limitation on co-linearity was set.

Assignment 4 - How to Train Your Pegasus


The purpose of this assignment was to integrate the previous work into one OOP project. The program utilizes a camera, sound, object, sprite, environment, and bezier curve classes to generate the output surrounding. The board is raised on a platform at the start then falls off once the position of the board isn't on the platform. The camera can be changed from arcball to freecam to first person to a sky view. The bezier curve, control points, and control cage can be turned on and off with a menu; the menu also controls whether the sound is on/off and if the sprite animates around the curve. The sprite loops indefinitely around the curve which is C0 and C1 continuous.

Lab 6 - Lights and Materials


The purpose of the lab was to introduce static and dynamic lighting. The left image shows a dynamic spotlight attached to the plane, thus when the plane moves the light moves and when the plane changes heading so does the spotlight. The right image shows the spotlight as well as the ambient lighting emenating from the teapot. The lights can be toggled on and off and the plane flown around.

Midterm Project - Guild Wars




The project built upon all skills from the past labs and assignments. The requirement list is extensive so I don't dare try and enumerate them. My personal contribution was the bezier surface, bezier curve, the rainbow track, the arc length and parameterized movement along the track, the math of the surface normal/ rotation angle/ rotation axis, point class, and sound class.

Lab 8 - Texture


The lab had us texture the teapot and a self-built cube. The other types of primitives don't have texture coordinates thus cannot be textured like the teapot and must be self-built.

Assn 5 - The Midplane


The assignment made use of texturing objects, specifically creating a skybox. A class was created for texturing a cube, which was then reused for the head of the character -- which could have been used for all limbs as well. An object file was also imported into the scene and modified with a minimum pass-through shader.

Assn 6 - Summon the Wizard


The assignment was to make use of particles and particle systems. Two types of particle systems were used: a fountain and rain, as seen in the images. Each particle was billboarded with a texture, and then rotated to face the camera. The project also incorporated shaders, and the modification through vertex attributes.

Assn 7 - To Arms! A Battle is Brewing


The assignment was to make a game with collisions and border detection. I emulated Pacman, however Pacman can no longer hide nor ride against the walls. The walls have been removed so Pacman will fall off the sides, the ghosts can also fall off the edges as well but they will respawn. Pacman as usual can pick up power pellets to ward off the ghosts, and must collect all pellets to win.

Final Project - Key to the Kingdom


The final project was an open ended project which my group decided to make an interactive solar system. The solar system contains our planets, rotating about their axis, about the Sun. Different shaders can be enabled as well as the camera transitions from planet to planet with user input. Other features of the project were developed but not fully implemented such as picking and selecting planets because of the time restriction of the project.