                  MathEngine Collision Toolkit
                  ----------------------------

Date of this release:     08/aug/2000
Date of previous release: 19/may/2000

***  Version 0.0.5  ***
Date of this release:     08/aug/2000

New features:
    (1) Explicit registration mechanism.
        You can individually select which geometry types and which
        geometry-geometry intersection algorithms are loaded into the
        system, providing fine control over code size.
    (2) Deformable terrain geometry type
    (3) Convex mesh geometry type
    (4) Convex mesh - Convex mesh interactions
    (5) Convex mesh - terrain interactions
    (6) Convex mesh - primitive interactions
    (7) direct use of contact simplification algorithm.

Improvements:
    The MeMemory API is now used for all memory allocation.

API changes:

    (1) In previous release, types and interactions were loaded implicitly
        by including the appropriate header files in the translation unit in
        which McdInit() is invoked. Now this has been replaced by explicit
        function calls:

       (1.1) change in function signature
             McdInit(); --> McdInit( int geoTypeMaxCount );

       (1.2) new functions, such as
             McdPrimitivesRegisterTypes();
             McdPrimitivesRegisterInteractions();
             ( see "API additions" for complete list )

    (2) parametrization of geometrical primitives

       (2.1) McdBoxCreate( MeReal r1, MeReal r2, MeReal r3 );
             --> 
             McdBoxCreate( MeReal d1, MeReal d2, MeReal d3 );
             (uses dimensions instead of radii ).
       
       (2.2) McdCylinderCreate( MeReal radius, MeReal halfHeight );
             -->
             McdCylinderCreate( MeReal radius, MeReal height );

       (2.3) type McdZPlane renamed to type McdPlane.

    (3) McdDtBridge and material properties
    
       (3.1) McdDtBridge initializer now takes an argument:
             McdDtBridgeInit(); -->
             McdDtBridgeInit( materialIDMaxCount );

       (3.2) Name change for setting relative transform:
             McdDtBridgeSetRelativeTransformPtr() -->
             McdDtBridgeSetRelativeTransformPtrToBody()

       (3.3) Material properties are now set via:
             McdDtBridgeGetDefaultMaterialID();
             McdDtBridgeGetNewMaterialID();
             McdDtBridgeGetMaterialIDMaxCount();

    (4) Changes in less-commonly-used API elements:

        (4.1) Direct intersection tests for individual McdModel pairs
              now performed via:
              McdIntersectHello();
              McdIntersect();
              McdIntersectGoodbye();

        (4.2) Change in access of nearby pairs in McdSpace:

              Originally using
              McdSpaceGetNewPairs();
              McdSpaceGetNearbyPairs();
              McdSpaceGetOldPairs();

              Now using
              McdSpaceGetHelloPairs();
              McdSpaceGetStayingPairs(); 
              McdSpaceGetGoodbyePair();

              and signatures now rely on an explicit pair iterator obtained from:
              McdSpaceGetHelloPairIterator();
              McdSpaceGetStayingPairIterator(); 
              McdSpaceGetGoodbyePairIterator();

        (4.3) various functions renamed:
               
              McdDtBridgeUpdateCompound --> 
              McdDtBridgeUpdateModelTransfromFromBody

              McdSpaceGetLineSegmentOverlapList --> 
              McdSpaceGetLineSegIntersections

              McdModelGetLineSegmentOverlapInfo -->  
              McdLineSegIntersect

              McdDispatcherSetContactPointMaxCount -> 
              McdIntersectSetContactBufferSize

              McdDispatcherGetContactPointMaxCount -> 
              McdIntersectGetContactBufferSize

              McdDispatcherSetMaxContactCount -> 
              McdIntersectRequestSetContactMaxCount

              McdDispatcherGetMaxContactCount -> 
              McdIntersectRequestGetContactMaxCount

        (4.4) various structs renamed

              McdSpacePair --> McdModelPair
              McdInteractionResult --> McdIntersectResult
              McdInteractionLSResult --> McdLineSegIntersectResult

API additions:

    (1) New types
        McdConvexMesh  (see McdConvexMesh.h )
        McdRGHeightField  (see McdRGHeightField.h )

    (2) Registration calls
        McdPrimitivesGetTypeCount(); 
        McdPrimitivesRegisterTypes();
        McdPrimitivesRegisterInteractions();
        McdSphereBoxPlaneRegisterTypes();
        McdSphereBoxPlaneRegisterInteractions();

    (3) Mass property computation for most geometry types
        McdGeometryGetMassProperties();

    (4) Simplification/reduction of results from contact generation
        McdContactSimplify();

    (5) McdDtBridge utility
        McdDtBridgeUpdateBodyTransfromFromModel()


***  Version 0.0.4  ***
*** Previous release ***
Date of this release:     19/may/2000


 Improvements:
 (1)  McdModelSetInteractionDisabled(McdModelID, McdModelID) now works
      when the specified models are in contact at the time of the call.
      The following restrictions apply:
      1) Overlapping pairs cannot be enabled and then disabled (or vice-versa)
      *between* collision updates.  If this is attempted, the "SetEnabled"
      function will return false upon the second (and subsequent)
      attempts.  Of course, now you can re-toggle the enabled status after the
      next update and it works as you would expect.
      
      2) Non-overlapping pairs may  be trivially toggled enabled/disabled as many
      times as you like, between updates or otherwise.
      
 (2)  McdPairHandler now accepts pairs that have no associated response.
    
 (3)  Example Source code improvements: 
          -  cd_ballnchain - uses a combination of joints and torus collision 
             for simulating the motion of a linked chain.
          -  cd_chair - demonstrates relative transforms for collision models.

 API changes:
 (4)  McdDtBridgeSetRelativeTransformPtr( McdModelID model, 
                MeMatrix4 relativeTM, MeMatrix4 compoundTM );
      now takes 2 parameters, and replaces the two calls:
          McdModelSetTransformPtr( model, compoundTM ); 
          McdModelSetRelativeTransformPtr( model, relativeTM ); 
    
 (5)  Cylinder is now interacting with Cylinder and has its own header file.


***  Version 0.0.3  ***
*** Previous release ***
Date of this release:     15/april/2000

  (1) Cylinder primitive has been added into the library. 
      All primitive intersections are now implemented except for
      cylinder/cylinder and cylinder/cone.

  (2) Line Segment intersection is completly implemented with all other
      primitives.

  (3) Bug fix:  Unimplemented intersections between primitive elements 
      no longer trigger a crash.


***  Version 0.0.2  ***
*** Previous release ***
Date of previous release: 12/april/2000

  (1) New features: In this release, interactions between cone and others
      primitives (box, sphere and plane) have been added. These interactions
      report only if they collide or not, for now, there is no contact 
      information generated. The contact info generation will be available
      very shortly.

  (2) The attached example code shows how to use the library. In the 
      _EvolveWorld()_ function, after calling "McdSpaceUpdate(space)",
      user needs to collect all nearby pairs of collision models. Then
      calling the function "McdDispatchPair(...)" will return if the
      pair is colliding or not, indicating intersection state.

  (3) Coordinate systems: In the latest version of rendering library used in 
      MathEngine, the cone's origin is at the middle height and y-axis goes
      through the apex. However for the collision model, we choose the
      cone's orgin at the center of mass corresponding to a solid cone. This
      is basically due to the consideration of convenience for dynamic 
      simulation. In the example code, the function "cs_convert_cone(...)"
      takes care for convesion from graphics transformation matrix to collison
      model transformation matrix. The value (ME_CONE_OFFSET*height) is the 
      distance from cone's base to its center of mass in y-direction.

  (4) Once the example code is running, press F8 to enable color change 
      indicating if two objects are intersecting. Also read the message 
      displayed in Console window for how to manipulating objects.

