Personal:
 
Welcome to my website. I am Software Engineer at Cubic Simulation Systems in Orlando, FL.
I graduated from
Purdue University in May 2006, majoring in
Computer Science with a minor in
Economics.
This website showcases some of the projects I have completed for school, research, or just for fun.
My career interests include 3D Computer Graphics and Virtual Reality.
Skills:
  Languages: C, C++, C#, Java, Lua, SQL, GLSL, Cg, XML
  Libraries: OpenGL, GLUT, STL, Granny, wxWidgets, Xerces XML
  Tools: Microsoft Visual Studio, Netbeans IDE
  Version-Control Software: Starteam, TortoiseSVN, Microsoft Visual SourceSafe, AccuRev
  Game Engines: CryEngine 3
Industry Experience:
  Senior Software Engineer
  August 2010 - Present
- Integrated a new weapon library with WST and CryEngine 3.
- Implemented features for WST and VTS applications.
- Debugged and shipped product for PM SANG customer.
- Currently, I am developing AI behaviors in CryEngine 3 for some new scenarios.
  Software Engineer II
  August 2006 - July 2010
 
Developed and maintained real-time military simulation applications using C++, OpenGL, MFC, C#, C++\CLI, and WPF.
I worked with a team of engineers on our main CGI application, the
ITTC product, and participated in the development
of Meggitt's next-generation military and law enforcement training platform using the Crytek CryEngine2 game engine.
More information on the Meggitt products that I worked on can be found here:
Purdue IEEE Aerial Robotics:
The
Purdue Aerial Robotics team has been working for several years to fly an unmanned helicopter around waypoints
and accomplish several missions including symbol recognition and building entry as part of the
AUVSI International Robotics Competition.
I am the lead developer of the HeliGraphics and HeliBrains applications for the Purdue Aerial Robotics System (PARS).
The applications provide a visual test-bed for displaying where the helicopter is located relative to other objects in the environment.
I completed the following tasks for these applications:
- data-driven scene population and configuration using XML
- camera translations and rotations using keyboard and mouse
- Vrml1, Vrml2, and ply model parsing
- texture loading
- terrain visualization
- helicopter animation with rotating blades
- simulation integration with third-party dynamics library
- model transformations
- powerful user interface using wxWidgets with menus, panels, controls, and OpenGL context
- integration with Xerces XML and schema validation
- interactive waypoint authoring for camera paths
- video creation using saved frames
- cube map import
Research:
 
After taking
Dr. Voicu Popescu's course in Fundamentals of Computer Graphics in Spring 2005,
I was fortunate enough to get a position doing computer graphics research for him at the
Computer Graphics and Visualization Lab.
Under the guidance of Dr. Popescu and Dr. Chunhui Mei, our efforts at improving real-time reflection algorithms and non-pinhole
camera models resulted in several papers described below.
Sample-based Cameras
 
Most of the research for this paper was done before I was involved with it. Basically the idea is to use a collection
of Binary Space Partition trees with pinhole cameras at the leaves to allow for feed-forward rendering of reflections
by projecting triangles onto the cameras. I spent some time working with this model of a Citroen car in 3D Studio Max.
I separated the pieces of the car into reflecive, diffuse, and transparent components. After writing some functions
to import the model into our project code, I extended a ray tracer to blend these components
together.
V.Popescu, E.Sacks, C.Mei, "Sample-Based Cameras for Feed-Forward Reflection Rendering",
IEEE Transactions on Visualization and Computer Graphics, 2006
PDF.
Video.
General Linear Cameras and K-Ray Cameras
 
My next task was to implement a 3-ray
General Linear Camera and approximate
geometric models with camera meshes, which will be used to project the scene triangles onto the cameras.
We then began studying non-pinhole cameras for use with rendering reflections. This research soon evolved into its own paper,
where we explored k-ray cameras including 3, 4, and 6-ray cameras. These new camera types are useful in computer vision
and computer graphics.
V.Popescu, J.Dauble, C.Mei, E. Sacks, "An Efficient Error-Bounded General Camera Model",
Third Int'l Symposium in 3D Data Processing, Visualization, and Transmission (3DPVT), Jun., 2006.
PDF
Video
Reflected-Scene Impostors
 
We then had an idea to approximate the geometry of the reflected scene with billboards, or impostors
taken from the view of the reflector. This allows for rendering of reflections on complex reflectors at interactive rates
with the help of some gpu hardware acceleration using Cg. Most of my time was spent writing software to animate
objects for this project through deformations and simple artificial intelligence. I also helped with developing scenes
for the video.
A powerpoint presentation by Dr. Popescu can be found
here.
V.Popescu, C.Mei, J.Dauble, E.Sacks, "Reflected-Scene Imposters for Realistic Reflections at Interactive Rates",
Computer Graphics Forum,volume 25,issue 3(EG 2006),Sep.,2006.
PDF
Video
Augmented Reality
 
In the summer of 2006, I helped
Dr. Phillip Dunston, a professor of Civil Engineering, and
Do Hyoung Shin, a Civil Engineering graduate research assistant, develop an Augmented Reality application for the purpose of aiding construction projects.
Do Hyoung constructed an elaborate HiBall tracking system that could precisely determine position and orientation of a tracked object.
I created an application using C++ and OpenGL that linked a virtual camera with the tracked object. Next, Do Hyoung mounted the tracked object
to a video camera. I used a third-party library to read the video camera's frame buffer memory and displayed it in my rendering window. I then
combined the video camera's information with a virtual model of pipes to comlete the Augmented Reality experience.
Here are some other videos I made related to research. Some are cool while the others just show errors.
|   |
Movie |
 Description |
|     |
movie |
Shows an animated Vespa |
|     |
movie |
Shows an animated Vespa driving towards a goal |
|     |
movie |
Shows three animated Vespas driving with artificial intelligence |
|     |
movie |
Highlights an error with a glc mesh caused by some bad vertices at a pole of a sphere. |
|     |
movie |
Highlights an similar error with a glc mesh caused by some bad vertices at a pole of a sphere. |
|     |
movie |
Shows the same error with the glcs shown in wireframe. |
|     |
movie |
Shows the same error with only the glcs shown. |
|     |
movie |
This is an early version of the movie submitted to CVPR. It is also longer than the final movie. |
|     |
movie |
A scene viewed from a Pin-Hole Camera. |
|     |
movie |
A scene viewed from a single General Linear Camera. |
|     |
movie |
A scene viewed from another General Linear Camera. |
|     |
movie |
A scene viewed from two General Linear Cameras. |
|     |
movie |
A scene viewed from two General Linear Cameras with different base planes. |
|     |
movie |
A scene viewed from two Normalized General Linear Cameras, developed by Dr. Mei, with different base planes. |
|     |
movie |
A scene viewed from a Bilinear Camera. Jing Ye, also a member of the research team, developed the Bilinear Camera. |
|     |
movie |
Two animated teapots with deformations and rotations. |
|     |
movie |
A bunny hitting a plane and shattering. This never worked out as well as I wanted it too. |
CS 334 Fundamentals of Computer Graphics
(Dr. Popescu, Spring 2005)
This course, which I took in Spring 2005, really sparked my interest in computer graphics. Even though Dr.
Popescu never gave us a break from almost weekly projects, the time spent working on these projects helped me
develop the skills I would later use for relevant research. In this course, we studied the basics of
interactive graphics including scene representations, rasterization, illumination, shading, clipping, and
texture mapping.
CS 434 Advanced Computer Graphics
(Dr. Popescu, Spring 2006)
There was still much to learn about computer graphics even after taking a couple courses on the subject. Because Dr. Popescu
focused much of his research on rendering reflections, many of our projects in cs434 involved implementing reflection rendering
techniques in software. We implemented common techniques such as environment mapping and ray tracing. Then we all implemented
some of the new technique of billboarding. Also, we implemented some other advanced graphics techniques, such as
perspective texture mapping, shadowing, lumigraphs, and alpha channel blending.
|   |
Movie |
 Description |
|     |
movie |
A rotating bunny rendered in wireframe. Some z-buffering issues produced a neat effect, so I kept them in for the video. |
|     |
movie |
A rotating bunny rendered with Gouraud shading. |
|     |
movie |
A rotating bunny rendered with Phong shading. |
|     |
movie |
Perspective Texture-Mapped cube with shadows and projections shown on multiple cameras. |
|     |
movie |
Another path for the same scene. |
|     |
movie |
Same scene with rotating cube and no path. |
|     |
movie |
Image-based rendering of a room with a single reference image. |
|     |
movie |
The same room with a camera path. |
|     |
movie |
The same room showing the 18 reference cameras and 2 billboards with alpha channel transparency. |
|     |
movie |
Image-based rendering of the room with 18 reference images and 2 billboards with alpha channel transparency. |
|     |
movie |
This is a movie comparing software environment mapping and ray tracing a cube map. |
|     |
movie |
This is a movie showing an implementation of our billboarding technique for a cs434 class assignment. |
|     |
movie |
This is a reconstruction of a scene using an 8x8 lumigraph grid. |
|     |
movie |
This is a video of all the reference images for a 32x32 lumigraph grid. |
|     |
movie |
This is a reconstruction of a scene using an 32x32 lumigraph grid. |