Robert Kooima

OBJ Library

Like many 3D graphics developers, I've developed a library of functions for loading, storing, and rendering 3D models in the OBJ file format. This library also provides an API for building, manipulating, and transforming OBJ model data. It automatically computes tangent and bi-tangent vectors for use in tangent-space surface mapping. It is capable of computing a model's average cache miss ratio (ACMR) and sorting index data to minimize this value and thus maximize rendering performance.

Also on GitHub.

Image Module

The image module provides support for loading and storing 2D images in PNG, JPEG, TIFF, or EXR format. It is implemented as a very thin abstraction layer atop libpng, libjpeg, libtiff, and OpenEXR, any of which may be optionally omitted if not needed.

Also on GitHub.

3D Mathematics Library

The 3D math module implements a right-handed 3D mathematics library supporting three-component vectors, four-by-four matrices, quaternions, and Euler angles. These values are represented using ordinary C arrays of type real, which may be compile-time represented using float or double. Matrix layout is directly compatible with OpenGL.

Also on GitHub.

Noise Module

The noise module implements a three-dimensional coherent noise generator using the Simplex method developed by Ken Perlin, described in Real-Time Shading SIGGRAPH Course Notes (2001), Chapter 2: Noise Hardware.

Also on GitHub.

Typography Module

The typography module uses FreeType2 to efficiently render high-quality, anti-aliased, kerned text using OpenGL.

Also on GitHub.

Demo Module

The demo module provides a simple GLUT application framework with basic interaction and camera control. It allows an OpenGL application to be brought up with near-zero “ceremony.”

Also on GitHub.

Plane Module

The plane module is a very basic OpenGL code that renders a simple gridded plane as on the cover of Edward Tufte's Visual Explanations. This is often useful as a backdrop to simple 3D demos, and it represents an introductory example of vertex buffer object creation, population, and rendering.

Also on GitHub.

Cube Module

The cube module renders the 3D reference cube using OpenGL. It is useful for testing object transformations and debugging OpenGL applictions. The implementation gives a simple example of basic rendering with the ARB vertex buffer object specification.

Also on GitHub.

Autostereo Interleaver

Summer 2008

Autostereo interleaver is a generalization of the Varrier Combiner algorithm that enables the creation of real-time multi-view autostereo displays using lenticular arrays and parallax barriers. It provides a channel crosstalk mitigation mechanism using destructive interference between adjacent channels.

trackd interface library

Spring 2006

The tracker module is a simple library for reading motion tracking data provided by trackd. It is compatible with both Linux and Windows. It enables access to six degree-of-freedom sensor input, button controller input, and joystick controller input, as commonly used in virtual reality display environments.

Easy Polygonal Text

May 2002

The glyph module provides an efficient, portable means of rendering polygonal text using OpenGL. It is fully self-contained and has no external dependencies, giving a trivially easy means of adding simple on-screen text to any OpenGL application.


kooima@csc.lsu.edu