Projects

Home
Research
Projects
Resume
Hobies & Links
Here're some of the small stuff that I worked over time:

Ray - My Doom Engine:
Inspired by the first of the ID Software's Doom series, I wrote the following engine on my junky i386. It is a 2D BSP renderer, not a raycaster. (Images may need some gamma correction). 

You can download the executable here.

QR - My Quake Engine: 
After spending some time with Quake (professionally of course :) ), I wrote a Quake Renderer (QR). This is another 3D BSP renderer. It reads Quake I .bsp files and lets you walk around ala Quake. All the texturemapping stuff is implemented in low level assembly. Despite many people, I think writing low level assembly for fast texturemapping and math stuff is quite fun (or at least was fun. It's been 5-6 years since I wrote this one. Since then graphics capabilities on PC's increased so much that everybody takes high quality bi-tri-linear texturemapping for granted). In order to use this one, you need the real Quake (you need real Quake data files for viewing). I also included a tool to extract the .bsp file from the .pack files. Maybe you can use this to find secrets in the game :).

As you can see, I couldn't implement lightmaps. I couldn't figure out how they are stored in .bsp files. If you know how, let me know. And here's the executable.

Pixie - RenderMan Renderer:
Pixie is a renderer that I've been working on for some time. It has its own web page at:

http://pixie.sourceforge.net

The RenderMan (R) Interface Procedures and RIB Protocol are:
Copyright 1988, 1989, Pixar. All rights reserved.
RenderMan (R) is a registered trademark of Pixar.


View Dependent Refinement of Progressive Meshes:
This is an X Windows based program for the view dependent refinement of progressive meshes. In this program, I implemented the refinement thru edge collapses only. So I start with the original mesh and perform edge collapses so that the detail level is adjusted to the desired level. Detail level is dictated by the view frustum, surface orientation and screen space error. For example, the portions of the mesh outside the viewing frustum or the parts that look away from you are refined to a lower detail level. The refinement step also takes the screen space error into account, i.e.: distant parts are fined more, flat areas refined more whereas silhouettes are refined less. Since I performed edge collapses only, the refinement step is lightning fast. I don't have to go through all the topology checks. Because I start from the original mesh. this also simplifies the ecol structure. So I don't need an outrageous disk space requirements. This also enables topology comprising refinement. For example, during the refinement, unconnected parts of the mesh can merge together (of course this depends on the underlying edge decimator. I used Garland's Simplification by Quadric Error Metrics). Here're some pictures:

The viewing frustum refinement: The original bunny had 5000 triangles, the refined version has 2700. The middle and right images show the refined bunny. The objective here is to decrease the number of triangles that are outside the viewing frustum without effecting the quality of the triangles that are inside the viewing frustum :
Here're some more images on frustum refinement:
 

The surface orientation refinement: The objective of this criterion is to decrease the number of triangles that look away from you without compromising the triangles that you actually see (that look towards you).

 

The screen space error refinement: The objective here is to decrease the number of triangles as long as we attain a fixed quality of the mesh as seen from the current camera. Note that the silhouettes are refined relatively less due to the bigger impact of edge collapses on  the visual quality.

Here're more images for screen space error refinement:

Of course, the ultimate objective of the method is to decrease the number of triangles so that we don't pay for what we don't see.


Delaunay Triangulator: 
This is my class project for cs294 #5 - Triangulation & Meshing.  I implemented 4 different Delaunay triangulation algorithms:

  • Guibas & Stolfi's divide and conquer with vertical splits
  • Guibas & Stolfi's divide and conquer with alternating splits
  • Incremental delaunay triangulation (randomized)
  • Gift wrapping

You can download the source code here.


RBody - Rigid Body Simulator


Here's my rigid body simulator that I call rbody. It is available with the source code here.