CTRL_RELATIVE and CTRL_ABSOLUTE
 
 
 

The absolute (CTRL_ABSOLUTE) and relative (CTRL_RELATIVE) options are used by both Control::GetValue() and Control::SetValue() in a similar way.

In the example of a position controller, CTRL_RELATIVE indicates that the val pointer passed in points to a matrix. Typically the position controller would then pre-multiply in its translation however the controller could modify the matrix in other ways. For example the path controller overwrites the translation portion of the matrix instead of pre-multiplying.

Note about Rotation Controllers

One other important issue is that rotation controllers expect different data types depending on whether Control::GetValue() or Control::SetValue() are called with CTRL_ABSOLUTE or CTRL_RELATIVE. In the CTRL_RELATIVE case, an angle/axis structure is used, and in the CTRL_ABSOLUTE case a quaternion is used. This allows for multiple revolutions to be tracked by the controller (which would have been lost if the angle/axis was converted to a quaternion).