CSE 40166 / 60166 - Computer Graphics

Thomas Falcon

First Assignment: Initials


In this assignment, we were tasked to draw our initials and CSE (Computer Science and Engineering) below them using some basic OpenGL Primitives, such as GL_TRIANGLES, GL_TRIANGLE_STRIP, etc. Curves were drawn rather easily using polar coordinates.

Second Assignment: Samurai


Here we have a fairy innacurate portrayal of a samurai. He can move left and right with 'a' and 'd', jump with 'w', and do a sword strike with a mouse click. He also follows the mouse position with its head and sword arm, breathes up and down as he focuses on his opponent, and shifts his legs from side to side to walk, a major proponent of the Crab fighting style

Third Assignment: Battle Tank


In this assignment, I created a battle tank that can move around in a 3D world. There are two screens with two cameras. The main screen shows the perspective of an arcball camera that is always focused on the tank. The camera can be rotated by clicking and dragging the screen with the left mouse button. Using the right mouse button similarly will zoom the camera in or out. The smaller screen is a first person view from the perspective of the gun turret. The tank can move forward and backward and turn left and right. The gunnery turret and barrel can also be rotated left and right, up and down, respectively. There are also objects and other tanks around the area so that we can get a better pespective of the tanks movement.

Fourth Assignment: Bezier Curve


The goal for this assignment was to draw bezier curves based on control points given in a file. Spheres represent the control points, with yellow lines connecting them. The blue lines are the bezier curves. A red sphere moves along the curve. This program also uses a free-moving camera to allow you to see different perspectives of the curves and a simple menu system that allows you to quit the program and reset the animation.

Midterm Project: ROLLERCOASTER!!!


This program reads a file of coordinates, which specifies the control points of bezier curves as well as coordinates of other objects. It then draws bezier curves and other objects based on these coordinates. Finally, it draws a cart that loops along the track. We created many classes to handle the many different facets of the scene, such as classes for points, vectors, bezier curves, lights, material, cameras, and even the track itself. Sounds were also included at key momoments to provide a sense of immersion to viewers.

Homework Assignment 5: Particle Systems!

The goal for this assignment was to model different kinds of particle systems, an example of which being maybe rain or fireworks. In particlar, we modeled a fountain, where particles are spawns at a sort of spout at a random velocity, after which they are affected by outside stimuli such as gravity. We also simulated a rain cloud, which spawns particles within the cloud area, and then fall down the to earth and create a splash as a drop hits the ground. In addition to modeling self updating particles and particle systems, we were also encouraged to used textures to make a more realistic environment. In this assignment, a skybox and ground textures were utilized to simulate an outside environment.

Homework Assignment 6: Human vs Zombies

This week's assignment was creating a simple game with the main focuses being flocking particle systems and collision detection. The player controls a character that must collect the golden coins that will save his village while navigating the objects laying about the world and avoiding the zombies chasing after him. The player cannot kill the zombies directly, but can hurt/kill them by luring them into each other or off of the island into the ocean. The player must also be aware of falling off the island too. If the zombies hit him too many times before he can collect the coins, he will die and the game will be over.

Homework Assignment 7: Shaders

This program demonstrates some of the things that you can do with GLSL shaders. A custom vertex shader implements pose-based animation, using linear interpolation to guide the model gradually from one stage to another. A custom fragment shader implements cel shading instead of the traditional lighting model, giving the model a cartoonish look. The model can also be moved around by the user with WASD, and the camera can be wheeled around to give different perspectives

Final Project: 3D Fauna Fighting Game

For our final project we implemented a simple fighting game between 2 lions, featuring pose-based animation and adrenaline-fueled rage shaders. The game is a bit violent, with animals biting, pouncing, and jumping at another, each hit drawing particle-based blood spurts. As the player is near death, the screen turns red, blurry, and experiences loss of peripheral vision. Animations are pose-based and are implemented with glsl vertex shaders. The animals are lit with pixel lighting instead of default fragment lighting. The project implements a simple multipass rendering process to handle multiple shaders. A series of other features such as textures, lights, and sounds provide a good atmosphere for the game's theme.