Assignment 3: Framebuffer Objects, Game of Life, Filters and Silhouettes using Geometry Shaders

Game of Life

The screenshot on the left shows the game of life in action. The game runs at around 30 frames per second. The game runs entirely on GPU with framebuffer objects being used to feed data from one frame to another.

The user can right click on the OpenGL display area and access options relevant to the current mode of the program. Here we see options relevant to the Game of Life mode.

 
 
 

Filters

The screenshot on the left shows multiple filters applied to a source image. You can choose from three different filters and apply them in any order, one or more times. Instead of flipping framebuffer objects whenever the user request a new filter, I store the chain of filter to apply in a linked list and apply them in selected order every frame. This helped me get a a better understanding of per fragment operationthroughput. Using the right click button the user can choose the source image and the filter to apply. An option to reset the list of filters to apply is also available.

The image on the left shows the New Zealand image passed through Luminance and Gaussian filter. My Gaussian filter might not look as convincing since I realized it only after I submitted my assignment that I didn't square the rho in the guassian distribution equation.

The image on the left shows an image of a Rose with Salt-n-Pepper noise. The image has been processed through 6 passes of 7x7 Box filter followed by 6 passed of Gaussian filter. The console output displays the entire chain of filter passes (not shown in screenshot).

 
 
 

Silhouette Extraction using Geometry Shaders

The image on the left shows Buddha rendered using Silhouette extraction geometry shader. The shader selectively discards geometry that doesn't belong to an edge as viewed from the camera's point of view.

The image on the left shows the same model rendered from light's point of view. Viewing this scene from camera's point of view doesn't make much sense though.

The image on the left shows Buddha rendered with shadow volumes. Here the edges are extracted from light's point of view and are then extruted by a certain scalar. The geometry shader takes lines as input and writes out triangle strips. I have shaded the farther points of extruded triangle strips with a darker color for better visualization of shadow volumes

 

Stupid WinSnap!!