Projects and Coursework
View my GPA info
View my summary of classes by year
View my summary of classes by subject

Computer Science classes I have taken (in approximate order within divisions):

Undergraduate Level Courses:
    (600.119) Honors C
    (600.118) Programming in C++
    (600.226) Data Structures
    (600.271) Computational Models
    (600.303) Supercomputing
    (600.333) Computer System Fundamentals

Undergraduate/Graduate Level Courses:
    (600.444) Computer Networks
    (600.457) Computer Graphics
    (600.421) Object Oriented Systems
    (600.456) Rendering Techniques
    (600.461) Computer Vision
    (600.463) Algorithms 1
    (600.460) Virtual Worlds
    (600.504) Independent Study/Research
   
(605.204) Intro to Assembly Language and Systems Software
   
Graduate Level Courses:
    (600.657) High-Performance Graphics and Modeling
    (605.437) Multimedia Systems Integration
    (605.451) Principles of Artificial Intelligence
    (600.757) Seminar in Computer Graphics

 


NOTE: Programs and code are not neccessarily system-independent! Some Images may be distorted due to either graphics file format or Web Browser!

(600.119) Honors C
-Programming Assignments:
        119hw.zip (undocumented)

-
Group Project: Text-based, networked, Pirates!
        119project.zip (undocumented)
          Sail the high-seas and barter with ports around the world. (You get the idea!)
   

 

(600.118) Programming in C++
-Programming Assignments:
        118hw.zip
          Hw1: Text formatting
          Hw2: Memory/Stack Management   
          Hw3,4: Calendar/Appointment Creation

-
Group Project:  MFC-based, networked, CLUE
        118project.zip
          Notes:  My part in the project was the main game functionality, including the entire GUI.
                       The game was never totally runnable though, since the other group members
                        could not get the networking done in time.  (The game was to be a client-server
                        type of game, with a chat option, etc).

          Screenshots:   
                                            Gameboard                                     Game Screen

                                       The game board itself.                        The Clue client window.

 

(600.226) Data Structures
-Programming Assignments: Java Applets that visually demonstrate the operation of
                                            various data structures.

       226hw.zip
          HW1:    Stacks and Queues
          HW2:    Sequences
          HW3:    Priority Queue
          HW4:    Dictionary
          HW5:    URL TXT file word counter

 

(600.271) Computational Models
    No Projects

 

(600.303) Supercomputing
    (short course) No Projects

 

(600.333) Computer System Fundamentals
-Programming Assignments: A few small MIPS assembly language assignments...
        including a fibonacci number generator, a sorting program, and Booth's
        algorithm. (Run using SPIM)
        333hw.zip

 

(600.444) Computer Networks
    No Projects

 

(600.457) Computer Graphics
-Programming Assignments:  (More complete descriptions are available in the zip files)
        HW1: 457hw1.zip
                    Allow the user to input a set of points, and scan-convert the points
                       into a filled polygon.  The output is a PPM image file.
                             457hw1a.gif (1770 bytes)
        HW2: 457hw2.zip
                    Addition of anti-aliasing to HW1 by way of Supersampling--
                       using a Box, Bartlett, or Gaussian filter.
                             457hw2a.gif (2104 bytes)
        HW3: 457hw3.zip
                    A 3D Robot in OpenGL.  The Dimensions of the robot are
                       read in from a file at run-time. The robot can be manipulated with
                       the mouse (body parts can be rotated, translated, etc)
                    Screenshots:
                           robot picture 1         robot picture 2

        HW4: 457hw4.zip
                    A manual implementation of Phong's Illumination Model, but still using OpenGL
                       for transformations and shading.  Parameters are read in from an input file.
                                      
         457hw4a.gif (3255 bytes)


-
Final Project:  Fractal Terrain Generator
        457project.zip
          Description: This program generates a height-map using 2 Fractal algorithms.  One
                              creates a height-map that is smooth, and one creates a height-map that
                              varies more.  The terrain is rendered in OpenGL, and GLUT is used
                              for the windowing.  The user can 'fly' over the terrain from a ground
                              view, or see the whole terrain from above.  New terrains can be
                              generated on the fly, and terrains can be saved by simply saving the
                              seed of the random number generator at the time the terrain was
                              created, hence one of the primary reasons for using fractals- storage
                              space of the whole height-map requires a single number!
                
                              There are also some primitive trees, just to show the expandability
                              of the program.

       
          Screenshots: (Blue is water, White symbolizes high mountain-tops, etc)
                              (The middle image is generated with the smoother fractal algorithm)

                   
A ground view of the water-land split.  An overhead view of a cool terrain  Overhead view of a smoother terrain  What a mountain!  Looking down a valley

 

(600.421) Object Oriented Systems
-Programming Assignments:  (Programming Language: VisualWorks Smalltalk)
        421hw_project.zip
          HW1: Write a Class for grading
          HW2: Boggle -- Text
          HW3: Boggle -- GUI

-Group ProjectSmalltalk Paint Program
        (see above zip file for the code)
           Screenshots:
                                   The ToolBar Window                 A little drawing that uses all the tools!

 

(600.456) Rendering Techniques
-Programming Assignments:   
        HW1: 456hw1.zip
                     Read in a PPM file, and display it using OpenGL and Glut
        HW2: 456hw2.zip
                     Using Java3D, create a rotating scene with:
                       1) Spinning cube texture-mapped with a picture of me!
                       2) 3 Sphere's of different colors and materials
                       3) A colorfull Tetrahedron
                     Screenshots:
                                  Spinning!             Still spinning!
        HW3: 456hw3.zip
                    Ray Caster- supports Warn spotlights, sphere primitives, and a Phong
                        Illumination model.  Everything is specified in eye coordinates.  Only
                        shadow rays are traced, so there is no transparency, etc. Output is a PPM.
            
                    Screenshots:
                         A collection of spheres                      Purple planet, blue moon

        HW4: 456hw4.zip
                    Ray Tracer- (extension to original ray caster from hw3)
                        Recursively traces transmission and reflection rays.  Now supports
                        triangle primitives.

                    Screenshots:
                                Some triangles with cool properties  Add some numbers and all we need is a table!   Wow, and a bug in the center too! (this was later fixed, but then I lost the model file!)  Wicked shadowing
                                              Scared yet?   boo!   Aliens?

-Final ProjectAdaptive Stochastic Ray Tracer w/Performance Enhancments
        456project.zip
          Description: (Expansion to RayTracer from homeworks, see text file in the zip
                                for a more in depth description)
                              First, anti-aliasing was added by adaptively shooting multiple rays
                              for each pixel, each with a stochastic distribution to make sure it is
                               sufficiently spread about the pixel area.  Then, ray-tracing speed
                               enhancements were put in, including accelerated intersection
                               algorithms, shadow-caching, adaptive ray-depth control, and
                               bounding volume hierarchies.  Planned additions, which time did
                               not allow, were gloss, translucency, extended light sources, and
                               depth of field.  All of the additions that weren't added are an extension
                               to the method of Stochastic Ray Tracing.

          Screenshots: (The second tree includes a bump-mapped triangle, and noise to simulate
                                snow.   The model was created by Brian Lawson.)

                          
         spheres    spheres    Some more spheres
                                                    A cool Christmas tree model   The Christmas tree with some random noise to make snow!

 

(600.461) Computer Vision
-Programming Assignments:
        461hw.zip
          HW1: Gamma correct images, and threshold images
          HW2: Apply Gaussian Template to various edges, Compute Canny Edges of images
          HW3: Label connected 'blobs' of a binary image.  For each blob, compute the Area,
                       Center of Mass, and Second Order Moments about the Center of Mass. Then
                       determine eigenvalues and eigenvectors of each blob, in order to assist in the
                       classification of it.

-Final ProjectTexture Classification
        461project.zip
          Description:  Characterize grey-scale textures using their 2nd-order co-occurrence matrices.
                   See the zip file for the code, gif's and pgm's of the textures that were classified, and
                   an Excel file of graphs of the resulting classification data.

 

(600.463) Algorithms 1
    No Projects

 

(600.657) High-Performance Graphics and Modeling
-Project & PresentationProgressive Volume Rendering
        657project.zip - See my enclosed presentation and summary paper for a
                         more detailed description of my program and of Volume
                         Rendering in general.
                        
Notice: For reasons of space conservation, the data-sets
                             are not included in the zip file. Email me if you want
                             to find out how to access them.  (There is one crappy
                                     small dataset, so you can at least run the program and
                                     see what it does).


          Description:  The assignment was to research our individual project topic, and then
                                give a presentation to the class in order to teach them about the subject.
                                In other words, the second half of the semester was a seminar based
                                upon individual student projects.

                              I chose to research Volume Rendering, and to focus on an individual area
                                of Volume Rendering for my project.  My presentation includes an outline
                                of the major areas of Volume Rendering, including ray-casting, marching
                                cubes, and the Fourier transform.

                              After much research, I decided to implement a form of ray-casting, that
                                progressively renders the volume at different resolutions, in order to
                                allow the user to interact with the volume.  The ray-caster uses a
                                Central Difference Operator to calculate gradients, and basic Linear
                                Interpolation for the sample points.  The rays are cast using an inverse
                                ray transform, which seems to be the fastest method.  There is no color
                                involved, since that would require more information about the data-set
                                than I had available.  The classification is a basic pre-calculated look-up
                                table of alpha values.

                              The program renders the volume at a medium resolution to begin with.
                                The user can select various rendering parameters such as the resolution,
                                the scaling, and the rotations.  Also included is an option to render the
                                volume in a perspective transform.  The modes of composition of sample
                                points include Front-Back, Maximum Intensity Projection, and Average
                                Intensity Projection.  Lastly, there are adjustable clipping planes along
                                the Z axis (relative to the screen).  While rotating or scaling the volume,
                                the program renders the volume at a low resolution to allow for
                                more interactive frame rates.  When the roation stops, the volume is
                                again rendered at the selected resolution. 

                              My implementation was successfull, in that with an average system the
                                user can move the volume with frame rates exceeding a few fps.  The
                                highest resolution rendering usually takes anywhere from 40-90s
                                per frame.  So, the quality of still renderings is sustained, while the
                                program still allows for interactive rotation of the volume.

          Screenshots:  Here are some screenshots taken from the program.  The data-sets are
                                thanks to Introduction to Volume Rendering, by Lichtenbelt, Crane,
                                and Naqvi.  More references and credits can be found in the zip file.
                                Oh, and don't let the seconds per frame fool you in these captures,
                                because the refreshing of the image caused the counter to be reset
                                back to 0.

                                     An engine block, rendered in the highest resolution.             An Average Intensity Projection of the engine

                                      An average intenisty projection of a lobster             A good rendering of a head, with the near Z clipping plane moved in.

                                     A Maximum Intensity Projection of the head.             The engine block in a lower resolution with a near clip.

                                    A Spine rendering in hi-res                 Spine rendering AIP

 

(600.460) Virtual Worlds
-Programming Assignments:
   HW1: Creation of a Model
      For this homework, we had to create a model of something 'toy-like'.   I created what I called
      a remote control hovercraft, which is pictured below.
   HW2: Animate and Navigate Model
      To follow-up with the last homework and get associated with the VR Hardware, we animated
      our models from HW1, and then made a basic OpenGL program which would allow us to
      navigate around and view the model.

-Final Project: Virtual Reality Wiffleball Simulation
   
Though my final project wasn't entirely successful due to hardware limitations, it had a great concept.
    I set out to create a wiffleball simulation in which you would be the batter and wear the VR headset
    in order to see a virtual pitch that you could swing at with a real bat.  The VR hardware, however,
    didn't want me to succeed since it didn't update itself enough, and was not accurate enough to
    do collision detection between the virtual ball and real bat. 

    I have some pictures of the models I was using that I will put up soon, along with the source code
    for the simulation.  However, you would need a system that could run it in order to view what I was
    able to do, and that could be hard to come by.

 

(600.504) Independent Study/Research
    Currently in Progress
    - Real-time Rendering of Outdoor Scenes through Texture-Based Simplification -

    History:

    I started out with the goal of creating an engine that would interactively render a very realistic outdoor scene.
    This led me to research such algorithms as Image Replacement and Polygonal Simplification in order to reduce
    the complexity of such a scene.  (So that it indeed could be rendered in real-time). 
   
    I found a great paper on the simulation of ecosystems, which had some awesome pictures of outdoor scenes.
    The authors of Realistic Modeling and Rendering of Plant Ecosystems were gracious enough to give me
    access to one of their model files.  The outdoor scene model was composed of around 17 million polygons,
    so it provided a good challenge for rendering in real-time.

    A Framework for the Real-time Walkthrough of Massive Models, helped me choose which method to first
    pursue in order to render the scene as efficiently as possible.   According to the paper, they were able to
    reduce a model of ~15 million poly's down to about 600,000 using Texture Meshes to cull/replace
    geometry. 

    Work:

    A summary of my work, along with screenshots and some code will be posted soon.  I was successful in
    increasing the rendering speed, but when certain parts of the model are being rendered it will still slow
    down to a crawl.  (Primarily an apple tree that is very complex).   There are many possible ways to
    enhance and expand my system, but I do not currently have the time to work on it.

 

(605.437) Multimedia Systems Integration
-Final Project:  Movie Production w/Special Effects on a small budget
   
This class dealt with many aspects of multimedia productions, from distance learning to multimedia
    hardware standards and codecs.  For my final project I decided to create a short movie, and attempt to
    digitize it and add special effects to it using my computer system along with some 'low-cost' video editing
    software.

    Due to major time considerations since I took the course over the summer, I was only able to create a final
    cut of the movie and add a few special effects, but not finish it.   I am still trying to find time to finish it and
    then hopefully put it up here.  It is basically a short Star Wars spoof, and was very fun to film.  I digitized it
    using an ATI All-in-Wonder PRO video card, and then edited it with some of Adobe's programs.  Since the
    raw video is taking up 90% of my hard drive space, it shouldn't be too long before I make the time to finish
    up the production!

(605.204) Intro to Assembly Language and Systems Software
-Programming Assignments:
   Various assignments in MIPS.  Code will be posted once class is over.

 

(605.451) Principles of Artificial Intelligence
-Programming Assignments:
   Some Lisp/Prolog assignments.  Code will be posted once class is over.

 

(600.757) Seminar in Computer Graphics
-Presentation:
   In this seminar each student takes a turn presenting a paper pertaining to Computer Graphics.  I presented
    the paper Realistic Modeling and Rendering of Plant Ecosystems, which was also part of the basis of my
    research/independent study. (see above)