Graphics Processing
in OpenGL, C++
Ray Tracer
#1 Lamdertian Shading
![](https://freight.cargo.site/t/original/i/b07e2548211990aef683933935349b429b6f4f1a2f725f25ba7f3b8aadc0794f/CBspheres_lambertian.png)
#2 Glass and Mirror Materials
![](https://freight.cargo.site/t/original/i/a97ba4f487f2ba722f44048b99633d1147f91fe91813f3f3cd29b034e898645b/CBspheres.png)
#3 Infinite Environment Lighting
![](https://freight.cargo.site/t/original/i/2835220d09da97df5f909073f493a1f8ba74c86dbf1e5b33c332416499a7d464/sphere_glass.png)
3D Geometric Processing
#1 BVH Building
[Image below: BVH building for the cow model]
![](https://freight.cargo.site/t/original/i/aedd88a1b6eda2156b8b926ccfbf35b305339a4aed2df7de7986a2272cb008b1/Screen-Shot-2016-04-13-at-6.17.45.png)
#2 Mesh Editor
In this project I implemented a simple mesh editor that can manipulate and resample triangle meshes, which is a tool that allows you to load and edit basic COLLADA mesh files that are now used by many major modeling packages and real time graphics engines.
- Downsampling
In this task I implemented a method that simplifies a given model by applying quadric error simplification. This method was originally developed at CMU by Michael Garland and Paul Heckbert, in their paper Surface Simplification Using Quadric Error Metrics.
[Image below: Downsampling a beast model]
![](https://freight.cargo.site/t/original/i/fc1196839ca164f40331de7c24f45164dbed609ce3fa192152c288e0396690d4/2-downsampling.gif)
- Upsampling
In this task, I implemented an upsampling processing function that makes a low resolution image displayed at a higher resolution.
[Image below: Upsampling a low-sampled torus]
![](https://freight.cargo.site/t/original/i/1ef78dfeff26e3df83caa0f4171dc4e6bdc5d0762ba7df6e6d200c2747b2401c/2-upsampling.gif)
- Resampling
In this task, I implemented resampling via Isotropic Remising, which makes the mesh as "uniform" as possible.
[Image below: Resampling a quadball]
![](https://freight.cargo.site/t/original/i/51c92dfa4f777b47ac222f0e67d5f5bb2b6e539ef03c6531d90234f2ae283e48/2-resampling.gif)
- Edge Flip / Split / Collapse
In this task I implemented a local remeshing operation that "flips" an edge, which:
#Handles corner cases.
#Performs efficiently.
#Is memory allocated clearly.
[Image below: Edge flipping, splitting, collapsing]
![](https://freight.cargo.site/t/original/i/39509f692e89b9e0f94b726d7b79c54eb7a4607ad538c143addac8581a4628d0/2-atom.gif)