.3DO File Format - Handles by P.A.Flack 2000

last revised 2-June-2000

HAND - Handles
This section is used to split the Primitives (PRIM) section into sections.  It consists of a set of string offset/offset pairs into the STRN & PRIM section, from where the normal reading can take place.  The 3do file must also be read normally, from offset 0 -> offset x to get the main visible part of the 3do.  The Handles seem to define things like collision trees (as in watglen\hay01.3do) or sub-objects (lotus.3do), etc.  Work remains on this section & STRN section, especially in the car 3do's, as things like ">" and numbers are referenced, suggesting a kind of script language.

2-June-2000: Time for some more information!

As already mentioned, Handles allow for multiple trees within the PRIM section.  Here I will explain how this can be used to make an object solid, by adding a collision volume.

To make an object solid, we must define its sides - e.g. for a house we'd have 4 walls, and 2 'sides' for the roof.  This will enclose the entire house behind the 6 'sides', which are actually planes.

With those 6 planes (arrows represent the direction of the plane), the house is enclosed.  If we were to test a point in space against these planes, we notice that when the point is behind *every* plane, it is actually inside the house - i.e. in collision with the house.   If the point is in front of even just one of the planes, a collision has not occured.

Here's a plan view of the 4 walls of the house, where the red lines/arrows are the 4 planes:

So how does this fit into the 3DO ?

Like this (assuming you're familiar with the nodes):

Node 4, 1 child
   Node 4, 6 children (one for each of the planes)
      Node 6 (referencing the first plane)
         Node 10, with 1 number
      Node 6 (referencing the second plane)
         Node 10, with 1 number
      Node 6 (referencing the third plane)
         Node 10, with 1 number
      Node 6 (referencing the fourth plane)
         Node 10, with 1 number
      Node 6 (referencing the fifth plane)
         Node 10, with 1 number
      Node 6 (referencing the sixth plane)
         Node 10, with 1 number

See how there is one type 6 -> type 10 node, per plane.  The number in the type 10 node defines how the cars collide with the object - e.g. soft, solid, bouncy, sticky, etc.  (not sure of the exact numbers...)

Some notes:
* You can only define concave collision volumes - e.g. a cube is okay, so is a sphere, but a cube with a hole in the middle is not okay, because the surfaces double back in on themselves, creating a confused object.

* But !  You *can* have multiple collision volumes in each object.  See the tree above - the first node has only one child - e.g. one collision volume.  By having multiple children (each the same layout as the example), you can create collision volumes such as the cube with a hole.  E.g. a bridge generally has two uprights, and a cross piece.  By using 3 collision volumes, this will work nicely.

* It is not necessary to completely enclose an object - if a cube is standing on the ground, why bother enclosing the bottom ?  The cars cannot go underground !    Similarly, something like a flag pole can do without a top, because the chances of a driver landing on top of the pole are fairly remote :-)



last revised 2-June-2000