Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Lightweight Ray class and operations for openFrameworks (e.g. hit detection, intersection). For more intense use check bullet physics
C++ Makefile
Latest commit 3339d8f @elliotwoods 0.9.0
Failed to load latest commit information.
ofxRayLib 0.9.0
ofxRay_example 0.9.0
ofxRay_ofPlaneExample 0.9.0
ofxRay_ofPlanePrimitiveExample 0.9.0
ofxRay_ofProjectorExample 0.9.0
src 0.9.0
.gitignore move the intersection method to update Mention the 0.8.0 tag in Readme



A lightweight set of tools for intersection testings (e.g. does a ray intersect a plane).


The current code in this repository is designed for openFrameworks 0.9.0 (which has different base classes). If you are looking for a version of ofxRay which is compatible with previous versions of openFrameworks, please check .



A Ray is defined by the starting point s and the transmission vector t . Check equation (5) at

We define a ray as an infinite line (continuing infinitely forwards and backwards along the line t and - t starting at s .

The line is defined by points s + u * t , where {-inf < u < +inf}.

A Line segment is a line which has finite length. We denote a line segment as a ofRay between s and t where infinite is set to false , i.e. a Line segment is a finite section along a ray


A Plane is defined by a position on the plane c and a normal vector n .

We can also define the plane using the notation a x + b y + c z + d = 0 (by using the appropriate constructor).

For a non-infinite plane, we define the bounds of the Plane segment with the 2D vector bounds, and the up vector up. We presume that the up vector and n vectors are perpendicular.


A Projector is defined by projection matrix and its pose (defined by ofNode which it inherits from).

We can use a projector to preview a projector or camera in a scene, and to generate pixel _ofRay_s.


A Camera is defined the same as a Projector, but has distortion coefficients also.


All objects within ofxRay inherit from ofGeometric.

Something went wrong with that request. Please try again.