CSCI 441 - Computer Graphics

Fall 2020

Kai Mizuno

|     Home   |   Assignments  |   Leaderboard  |   Schedule  |   Resources    |

"Giorno Giovanna"


A1 - Character Banner


This is my character banner! This features the nickname of my character ("GioGio"), and a character symbol (the ladybugs). I created this as I was starting to learn how to use OpenGL. I practiced different ways of generating the triangles used to draw images, using different primitives such as GL_TRIANGLE_STRIP and GL_TRIANGLE_FAN and moving images with translations, rotations, and scaling. I am particularly proud of how I picked up on using parametric equations to start drawing images, such as the circles and the heart, which when used in conjunction with the GL_TRIANGLE_FAN can create pretty smooth looking drawings.

A2 - Character Portrait


This is a portrait of my character, Giorno!. For this assignment, I needed to create a scene for my character and implement various forms of animation and user interaction with the character. I implemented each part of Giorno's body modularly, which made that task much more manageable as apposed to having a large block of draw functions. I implemented features such as: Giorno's arm always being animated and moving up and down, Giorno moves around the screen when arrow keys are pressed, the color pallet changes whenever left-mouse is pressed, and parts of Giorno's hair move depending on where the mouse is hovering on screen.

A3 - 3D Vehicle


This is a 3D render for a simple airplane. For this assignment, I needed to dive into making a 3D world with a vehicle that gets tracked by an arcball camera. I created an airplane that can change direction using the 'A' and 'D' keys and move forward with the 'W' and 'S' keys. I implemented an arcball camera that follows the plane around as it moves, and the user can rotate the camera around the plane by holding left-click and dragging the mouse, or zoom in/out on the plane by holding left-click and left-control and dragging the mouse. The propeller of the plane also spins when the plane is in motion!

A4 - Point Lights


For this assignment, I took the code from the previous assignment (A3) and implemented a custom vertex and fragment shader. I used Gourad shading to implement two point lights, which act like stars in the world. The shaders calculate the diffuse component of each light source as it hits each vertex and sets the color of the fragments accordingly. The lights also exhibit attenuation, where the further away something is, the less lit up it will be.

Midterm - Put it all together


For our midterm project, we worked in groups to create a world that implemented all of our characters alongside the camera and lighting implementations we had learned about.
This program creates a world containing three characters designed by our group members. The program let's use choose which character to control and move around the world. You can also show a first person view of the character you're controlling, or go into a free-cam mode to explore the world on your own. The world contains 3 types of lighting: directional, point, and spot lights. The directional lighting affects a single quarter of the map, the spot light is at the center of the map, and the point light is at another corner. Each light uses Gourad shading and implements diffuse, specular, and ambient lighting. The spot light and point light exhibit attenuation.

A5 - Bezier Curve and Skybox


For this assignment, I loaded in control points from a config file to generated a bezier curve, and created a mascot to trace the curve in an animation. In this picture, you can see the bezier control points, wire-frame, and generated curve surrounding the plane. The mascot (the small yellow head) continuously traces the path of the generated bezier curve. The entire bezier system follows and rotates along with the plane. A skybox was also created by texturing 6 different quads representing the 6 sides of a cube, then surrounding the entire world with the cube formed by these textured quads.

A6 - Particle Systems


This program takes the world developed in A5, and adds an implementation for a fountain particle system. Particle systems are read in with a control file. Particles are under the influence of a basic physics model, where they are given an initial position and velocity and are under the effect of a downward gravitational force. Particles are also given a specified lifespan, which is passed to the vertex and geometry shader to progressively make the particles smaller as they age. Once their lifespan completes, particles die out.

A7 - Collisions and Flocking


This project creates a simple game to showcase collision detection and flocking. Control the hero (the cone) and move them around the map. Going to undiscovered cells turns them green. Try to turn all cells green before dying. Enemies (moving cubes) follow the hero around the map. When they aren't pointing directly at the hero, they slowly turn to face it until their heading is realigned with the hero. There are a few buildings spread around the map that the hero and enemies can collide with. When a hero or enemy goes off the bounds of the map, they will fall to their deaths.

Final Project


For the final project of the course, we put together many of the different applications of OpenGL that we learned into one cohesive program. My group made a maze game. The game features two characters that the user must switch between and help navigate both to the goal. Each player was their own dynamic light source, lighting the area directly around them. We made use of a skybox to set the tone of the world. Each player has a particle system that follows them around. The particles were made with a custom geometry shader, that shrinks the size of the particles in proportion to their lifespan, and makes use of a hashing function to make pseudo-random descisions for the corners of each particle's quad, giving off a glitchy appearance. We also implemented a post-processing shader, which uses that same hashing function to help give the static shown on screen. The static gets less intense the closer the viewing player is to the goal.