hwGroup - create a group of objects which share a transformation



Children *O The list of children which are grouped together in this object
Invisible 1B True if the object is not to be displayed; false otherwise
Visibility 1I Visibility mask for use with hwDisplay->setVisibility
LOD *F Array of level-of-detail information
Matrices *F Individual transform matrix for each Child
OptFlags 1B Optimization flags; see hw for more details


Children {}
Invisible False
Visibility 0xFFFFFFFF
LOD {}
Matrices {}
OptFlags False


The hwGroup class is used to group a set of children together and apply a common transformation to them. This is useful for two reasons; first, it is often easier to transform multiple objects simultaneously; second, a hierarchy of objects enhances the visibility culling algorithms used by HoverWare.

The LOD property is an array of minimum and maximum LOD values at which the corresponding Child is to be drawn. The LOD values are expressed as a percentage of viewport size. When the bounding volume of the whole group is found to be within range of a particular Child's LOD min and max, then that child is drawn. If the Children array has more entries than the LOD array has pairs, then the extra Children are always drawn.

The Matrices property is used to transform individual Children. Every 16 floats of the Matrices property is considered to be an individual matrix corresponding to the i'th Child. This matrix is pushed before the Child is drawn, and then popped afterward. If there are more Children than Matrices, the extra children are drawn without an extra matrix push/pop.


    /* Draw a group of objects all rotated about Y by 30 degrees */
        objectList[] = {obj1, obj2, obj3, obj4};

    group = hwGroup->create( hwGroup );
    group->modify( group, hwStrChildren,
                        HW_MAKE_TYPE(HW_TYPE_OBJECT,4), objectList );
    HW_MODIFY_3F( group, hwStrRotate, 0.0, 30.0, 0.0 );
    group->draw( group );
    group->destroy( group );


    # A group of objects, rotated about Y by 30 degrees
    hwGroup group {
        Rotate = {0,30,0}
        Children = {obj1, obj2, obj3, obj4}


hw, hwOrient, hwDisplay->setVisibility