Simulating Rigid Body Dynamics Using Mass-Spring Systems.

Simulating rigid body dynamics traditionally requires knowledge of many different
facets of physics and mathematics. In such a simulation we must define the state
of the body at any given instance of the simulation. In order to accomplish this
we must calculate the following data:

- mass and moments of inertia

- position and velocity of every object

- rotational and angular force/momentum

- torque

- velocity and acceleration, linear and rotational

- numerical integrator

Flexible body dynamics calculate position, velocity, acceleration,
and force using particles, mass-springs, and a numerical integrator (this project
uses 4th order Runge-Kutta), to run the simulation. This requires much less
background of physics and mathematics. This is the idea of Dr. John McDonald's
paper “On Flexible Body Approximations of Rigid Body Dynamics.” This project
attempts to construct the ideas proposed in this paper. Specifically, this project
simulates the dynamics of a toy top rotating, slowly loosing momentum, interacting
with boundaries in space, and eventually toppling over on its side.

[view the full project...]

Efficient Soft-Edged Shadows Using Percentage Closer Filtering and Pixel Shader Branching.

Shadow map techniques are employed in computer graphics to improve visual realism.
The shadow map algorithm requires a two pass render of a scene – once from the
light’s perspective and a second from the camera’s perspective. The render from the
light’s perspective records the depth values from the light source to each object in
the scene. The depth values are written to a pbuffer, then stored in a texture
where it can later be sent to the fragment shader as a uniform sampler. When
rendering the scene from the camara’s view, each screen pixel is transformed to light
coordinates where its z-value is compared to the value stored in the shadow map.
This compare operation is performed in the fragment shader using the shadow2DProj
function. If the pixel’s z-value is higher than the depth value of the shadow map
then that pixel is in shadow. If the pixel’s z-value is lower than the depth value
stored in the shadow map then the pixel is not in shadow.

One inherent side effect of shadow maps is a hard, aliased edge around the
shadow. Building soft edged shadows using percentage closer filtering and pixel shader
branching is a visual enhancement to the shadow map that employs optimization mechanisms
for calculating a soft penumbra region around a shadow where we previously had a hard,
aliased edge.

[view the full project...]

OORenderGL Software Rendering System.

OORenderGL is a software rendering system. A skeleton framework was provided and
I implemented, using C++ and OpenGL, a rendering systems that encapsulates the following
fundamentals of graphics development:

- Faceted, Gouraud, and Phong shading

- Texture mapping, uv coordinates, mesh data structures

- Applying textures to a mesh using shape, entity, and mapaxis

- OpenGL texture mapping and filtering functions

- Box mapping, reflection mapping, light mapping, and environment maps

- OpenGL transformation pipeline

- Matrix operations for interactive display such as rotating, translating, and zoom

[view the full project...]