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.
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.
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.
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.
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.
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.