Improvements of Version 2.00
RAPID version 2.00 has the following improvements over the original release, version 1.04:
- Use include file "RAPID.H": The RAPID API now requires only that you include "RAPID.H" and link to "libRAPID.a" to be able to use the library.
- Standalone library: RAPID no longer uses the SVM library. RAPID only depends on the standard math library, "libm.a", which you probably link to anyway.
- Use object "RAPID_model" instead of "box": The C++ object into which you load polygons is now called "RAPID_model". Previous versions used "box," which was a holdover from prerelease implementations, and was not a suitable identifier for the API.
- Consistent use of "RAPID_" prefix: All the globals, such as those which began with "OBBTC_" now use the prefix "RAPID_". Note, also, that the old constants "ALL_CONTACTS" and "FIRST_CONTACT" have been replaced with the symbols "RAPID_ALL_CONSTACTS" and "RAPID_FIRST_CONTACT" in RAPID 2.00.
- No explicit library initialization: Previous versions required the client to call 'box::initialize()' before any other RAPID library call. This was a common but unnecessary source of client bugs (people forgot to call this routine). RAPID 2.00 no longer requires this, since all API routines check to see if the library has been initialized. This extra check has had a negligible performance impact.
- Revision of model construction interface: RAPID 2.00 requires calls to BeginModel() and EndModel() to enclose the AddTri() calls for building objects. This more resembles the OpenGL interface, with which many clients will likely be familiar. Generally, preprocessing of the objects will take place when EndModel() is called. Later versions of RAPID will allow special procedures to be placed after the BeginModel() call but before the first AddTri() call to give the client more control over how the models are preprocessed.
- Faster preprocessing: The preprocessing for RAPID has been greatly improved in terms of speed. RAPID 2.00 is generally 5 times faster than previous versions in preprocessing models. The quality of the hierarchies have theoretically been affected, in some ways for the better and in some ways for the worse, but we have not conducted a thorough study to gauge overall impact of our changes. In a later release, we intend to provide an alternative preprocessing algorithm which will be computationally expensive but which will build better hierarchies.
- No support for plain C: Some clients may not consider this an improvement, but support for plain C has been discontinued. Of course, clients are still able to construct their own plain C wrappers for the C++ functions in RAPID. This change has made the implementation of RAPID more clean.
The changes in the C++ interface are largely cosmetic. To make any C++ client up-to-date with RAPID version 2.00, just do the following steps:
- Delete any calls to "box::initialize()".
- Change #include "box.H" to #include "RAPID.H" in all your files.
- In your makefiles, link to "libRAPID.a" instead of "libobbt.a".
- Don't link to "libSVM.a" unless you use it in your client code. RAPID doesn't use it anymore.
- Change "box" to "RAPID_model" everywhere it occurs in your code.
- Wherever you allocate a new model with "new RAPID_model" (which was "new box" before the second step), follow it with a call to "BeginModel()".
- Replace all calls to "add_tri(...)" with "AddTri(...)".
- Replace all calls to "build_hierarchy()" with "EndModel()".
- Replace all references to "ALL_CONTACTS" with "RAPID_ALL_CONTACTS".
- Replace all references to "FIRST_CONTACT" with "RAPID_FIRST_CONTACT".
- Wherever you refer to an identifier with the prefix "OBBTC_", replace the prefix with "RAPID_".
Click here to obtain RAPID version 2.00.
Geometric Algorithms for Modeling, Motion, and Animation
Last updated by gottscha@cs.unc.edu. Please send comments or questions to geom@cs.unc.edu.