VRML History logo

VRML History -- Node reference

 Revised at 15 October 1999.

--- VRML separator bar ---

+ Introduction

This clause provides a detailed definition of the syntax and semantics of each new or extended node of VRML History. For the node reference of VRML97 see the  VRML97 Specification Node reference. Table 1 lists the topics in this clause.

Table 1 -- Table of contents

Introduction
Node Declaration File
Entity
History
HistoryTexture
HistoryGeometry
NavigationInfo
ProximitySensor
TimeInterpolator
ValidPeriod
ValidTimeSensor
Viewpoint
In this clause, the first item in each subclause presents the public declaration for the node. This syntax is not the actual UTF-8 encoding syntax. The parts of the interface that are identical to the UTF-8 encoding syntax are in bold. The node declaration defines the names and types of the fields and events for the node, as well as the default values for the fields.

The node declarations also include value ranges for the node's fields and exposedFields (where appropriate). Parentheses imply that the range bound is exclusive, while brackets imply that the range value is inclusive. For example, a range of (-,1] defines the lower bound as - exclusively and the upper bound as 1 inclusively.

For example, the following defines the Collision node declaration:

   Collision { 
      eventIn      MFNode   addChildren
      eventIn      MFNode   removeChildren
      exposedField MFNode   children    []
      exposedField SFBool   collide     TRUE
      field        SFVec3f  bboxCenter  0 0 0     # (-,)
      field        SFVec3f  bboxSize    -1 -1 -1  # (0,) or -1,-1,-1
      field        SFNode   proxy       NULL
      eventOut     SFTime   collideTime
    }
The fields and events contained within the node declarations are ordered as follows:

  1. eventIns, in alphabetical order;
  2. exposedFields, in alphabetical order;
  3. fields, in alphabetical order;
  4. eventOuts, in alphabetical order.

For the definition of extended nodes the original definition in the VRML97 Specification is referred and new fields and events of this node are emphasized (in italic style).

--- VRML separator bar ---

+Node Declaration File

The file vrmlHistory.wrl contains all new nodes as EXTERNPROTO definitions. This can be used as starting point for all VRML worlds incorporating nodes defined in VRML History.

--- VRML separator bar ---

+Entity

Entity { 
  eventIn       SFBool      isSelected
  exposedField  SFString    id            ""
  exposedField  SFString    layer         ""
  exposedField  SFBool      isVisible     TRUE
  exposedField  SFBool      isHighlighted FALSE
  exposedField  MFNode      shape         []
  exposedField  MFNode      attribute     []
  eventOut      MFNode      selectedId    []
}
The Entity grouping node is a wrapper around graphical objects constructing an entity with some special features. An entity is a wellknown construct in conceptual data modeling. It is a relation of different attributes with an identification function.

Here, the identification is done by the fields id and layer. The field id defines the name of the entity and the field layer the cartographical layer which allows thematical grouping of the entities. All entities in the world are automatically listed in an EntityList which is a special window accompanied with the presentation of the world. The EntityList is build to give the viewer at hand some selecting functionality between the EnityList and the world. In the EntityList, besides the list of all entities, a list of the associated layers is displayed. Selecting an single entity in the EntityList selects the graphical object in the world associated with this entity (i.e. highlighted or made (in)visible). Selecting a layer, selects all graphical objects associated with the entities associated with this layer. Selecting a graphical object in the presentation of the world, selects the entity name in the EnityList if it is associated with an entity.

By default, each entity can be made (in)visible or can be highlighted via the fields isVisible and isHighlighted. The field shape specifies the description of the graphical appearance and the field attribute the thematical (i.e. non-spatial, but also time-variant) attributes of the entity.

If there is a special object selecting method in the world, an event can be sent to the field isSelected which activates the entity to return its name and layer name to the world via the field selectedId.

--- VRML separator bar ---

+History

History { 
  exposedField  SFNode  validPeriod     NULL
  exposedField  MFNode  version         []
}
The History grouping node specifies a time variant object with different representations/versions. It traverses zero or one of the nodes specified in the version field depending on the defined valid period and on the current valid time point.

4.6.5, Grouping and children nodes, describes details on the types of nodes that are legal values for version.

Time variant grouping node describes details on the maximal time validity of children nodes whose parent node is a node in version field.

The validPeriod field, if specified, shall contain a ValidPeriod node defining the period when the time variant object is valid. Normally the ValidPeriod node contains different consecutive version time periods with each of that being linked to a version defined by one node in the version field. The version time period pi in the valid period is linked to node i in the version field. If the version time period contains the current valid time point this node is traversed. Nothing is shown if the current valid time point is outside of valid period.

If the validPeriod field is NULL or unspecified the History node is time invariant and only the first version is shown regardless of the current valid time point.

If the version field is NULL nothing is drawn regardless of the valid period and the current valid time.

The isEvent field supports the definition of list of Events. If it is TRUE the version time period of each version of this node is reduced to the first time point in the version time period defined according to the time granularity.

All nodes under a History node continue to receive and send events regardless of the current valid time and the currently shown version.

--- VRML separator bar ---

+HistoryTexture

HistoryTexture { 
  exposedField  MFNode  texture             []
  exposedField  SFNode  validPeriod         NULL
}
The HistoryTexture node specifies a time variant texture property node for the 6.3, Appearance node. Depending on the valid period defined and the current valid time point it traverses zero or one of the textures specified in the texture field. This node can only be used with the new implementation of the 6.3, Appearance node given in vrmlHistory 2.1.The texture field of that Appearance node may contain this HistoryTexture node or other texture nodes.

The validPeriod field, if specified, shall contain a ValidPeriod node defining the period when the time variant texture is valid. Normally the ValidPeriod node contains different consecutive version time periods with each of that being linked to a texture version defined by one node in the texture field. The version time period pi in the valid period is linked to node i in the texture field. If the version time period contains the current valid time point this node is used for texturing the object whose Appearance node references this HistoryTexture node. The object is not textured if the current valid time point is outside of the valid period.

If the validPeriod field is NULL or unspecified the texture is time-invariant and only the first texture version is used for texturing regardless of the current valid time point.

The texture field, if not empty, shall contain any of the various types of texture nodes (ImageTexture, MovieTexture, or PixelTexture). If the texture field is empty the object  is not textured whose Appearance node references this HistoryTexture.

--- VRML separator bar ---

+HistoryGeometry

HistoryGeometry { 
  exposedField  MFNode  geometry        []
  exposedField  SFNode  validPeriod     NULL
}
The HistoryGeometry node is used to create rendered object with a time-variant geometry property in the world.  This node can only be used with the new implementation of the 6.41, Shape node given in vrmlHistory 2.1. The geometry field of that Shape node may contain this HistoryGeometry node or other geometry nodes (see 4.6.3, Shapes and geometry).

The geometry field may contain a set of different geometry nodes. The one which is traversed is specified by the valid period and the current valid time point. The traversed geometry node is rendered with the specified appearance node applied. See 4.6.3, Shapes and geometry, and 6.3, Appearance, for more information.

The validPeriod field, if specified, shall contain a ValidPeriod node defining the period when the time variant geometry is valid. Normally the ValidPeriod node contains different consecutive version time periods with each of that being linked to a geometry version defined by one node in the geometry field. The version time period pi in the valid period is linked to node i in the geometry field. If the version time period contains the current valid time point this geometry node is rendered. No geometry is drawn if the current valid time point is outside of the valid period.

If the validPeriod field is NULL or unspecified the geometry is time-invariant and only the first geometry version is rendered regardless of the current valid time point.

4.14, Lighting model, contains details of the VRML lighting model and the interaction between Appearance nodes and geometry nodes.

If the geometry field is empty, the object is not drawn.

--- VRML separator bar ---

+NavigationInfo

NavigationInfo { 
  eventIn      SFBool   set_bind
  exposedField MFFloat  avatarSize      [0.25, 1.6, 0.75] # [0,)
  exposedField SFBool   headlight       TRUE
  exposedField SFFloat  speed           1.0               # [0,)
  exposedField MFString type            ["TIME_WALK_vrmlHistory", "WALK", "ANY"]
  exposedField SFFloat  visibilityLimit 0.0               # [0,)
  eventOut     SFBool   isBound
}
See also 6.29, NavigationInfo in the VRML97 Specification.

The NavigationInfo node contains information describing the physical characteristics of the viewer's avatar and viewing model. NavigationInfo node is a bindable node (see 4.6.10, Bindable children nodes). Thus, there exists a NavigationInfo node stack in which the top-most NavigationInfo node on the stack is the currently bound NavigationInfo node.

The type field specifies an ordered list of navigation paradigms that specify a combination of navigation types and the initial navigation type. The navigation type of the currently bound NavigationInfo node determines the user interface capabilities of the browser. For example, if the currently bound NavigationInfo node's type is "WALK", the browser shall present a WALK navigation user interface paradigm. Browsers shall recognize and support at least the following navigation types: "ANY", "WALK", "EXAMINE", "FLY", and "NONE". In addition, for navigating in valid time dimension the navigation type "TIME_WALK_vrmlHistory" and "TIME_STUDY_vrmlHistory" shall be recognized. Both navigation paradigms are used to change the current valid time point at wich a virtual world is shown. During navigating in valid time dimension collision detection should be disabled.

In TIME_WALK_vrmlHistory navigation the user specifies the  increment of a continuously time navigation, in TIME_STUDY_vrmlHistory the user moves the virtual time line by the specified amount.

If "ANY" does not appear in the type field list of the currently bound NavigationInfo, the browser's navigation user interface shall be restricted to the recognized navigation types specified in the list. In this case, browsers shall not present a user interface that allows the navigation type to be changed to a type not specified in the list. However, if any one of the values in the type field are "ANY", the browser may provide any type of navigation interface, and allow the user to change the navigation type dynamically. Furthermore, the first recognized type in the list shall be the initial navigation type presented by the browser's user interface.

--- VRML separator bar ---

+ProximitySensor

ProximitySensor { 
  exposedField SFVec3f    center              0 0 0    # (-,)
  exposedField SFVec3f    size                0 0 0    # [0,)
  exposedField SFBool     enabled             TRUE
  exposedField SFNode     validPeriod         NULL            # new
  eventOut     SFBool     isActive
  eventOut     SFVec3f    position_changed
  eventOut     SFRotation orientation_changed
  eventOut     SFTime     validTime_changed                   # new
  eventOut     SFTime     enterTime
  eventOut     SFTime     exitTime
}
See also 6.38, ProximitySensor in the VRML97 Specification. In addition to the VRML97 Specification the ProximitySensor node has two more fields: validPeriod and validTime_changed.

The ProximitySensor node generates events when the viewer enters, exits, and moves within a region in space and time (defined by a 4D-box). A proximity sensor is enabled or disabled by sending it an enabled event with a value of TRUE or FALSE. A disabled sensor does not send events.

A ProximitySensor node generates isActive TRUE/FALSE events as the viewer enters and exits the rectangular box defined by its center, size and validPeriod fields. Browsers shall interpolate viewer positions and timestamp the isActive events with the exact time the viewer first intersected the proximity region. The center field defines the centre point of the proximity region in object space. The size field specifies a vector which defines the width (x), height (y), and depth (z) of the box bounding the region. The components of the size field shall be greater than or equal to zero. The validPeriod field, if specified, shall contain a ValidPeriod node defining the period when the space-oriented proximity region is valid. ProximitySensor nodes are affected by the hierarchical transformations of their parents.

The enterTime event is generated whenever the isActive TRUE event is generated (user enters the box), and exitTime events are generated whenever an isActive FALSE event is generated (user exits the box).

The position_changed, orientation_changed and validTime_changed eventOuts send events whenever the user is contained within the proximity region and the position, orientation and current valid time point of the viewer changes with respect to the ProximitySensor node's coordinate system including enter and exit times. The viewer movement may be a result of a variety of circumstances resulting from browser navigation, ProximitySensor node's coordinate system changes, or bound Viewpoint node's position or orientation changes.

Each ProximitySensor node behaves independently of all other ProximitySensor nodes. Every enabled ProximitySensor node that is affected by the viewer's movement receives and sends events, possibly resulting in multiple ProximitySensor nodes receiving and sending events simultaneously. Unlike TouchSensor nodes, there is no notion of a ProximitySensor node lower in the scene graph "grabbing" events.

Instanced (DEF/USE) ProximitySensor nodes use the union of all the boxes to check for enter and exit. A multiply instanced ProximitySensor node will detect enter and exit for all instances of the box and send enter/exit events appropriately. However, the results are undefined if the any of the boxes of a multiply instanced ProximitySensor node overlap.

A ProximitySensor node that surrounds the entire world (space and time) has an enterTime equal to the time that the world was entered and can be used to start up animations or behaviours as soon as a world is loaded.

A ProximitySensor node with a box containing zero volume in space (i.e. any size field element of 0.0) but with a specified valid period changes to a valid time specific proximity sensor, i.e. it generates further events on changes of the current valid time point. If the validPeriod field is NULL or unspecified, but the node has a box containig a non-zero volume in space (i.e. each size field element greater than 0.0) then the space-oriented proximity region is time invariant and the ProximitySensor node acts identical as itis defined in 6.38, ProximitySensor. A ProximitySensor node with a 4D-box containing zero volume (i.e., any size field element of 0.0 and an unspecified validPeriod field) cannot generate events. This is equivalent to setting the enabled field to FALSE.

A ProximitySensor read from a VRML file shall generate isActive TRUE, position_changed, orientation_changed, validTime_changed  and enterTime events if the sensor is enabled and the viewer is inside the proximity region, i.e. inside the region of space and time. A ProximitySensor inserted into the transformation hierarchy shall generate isActive TRUE, position_changed, orientation_changed, validTime_changed and enterTime events if the sensor is enabled and the viewer is inside the proximity region. A ProximitySensor removed from the transformation hierarchy shall generate isActive FALSE, position_changed, orientation_changed, validTime_changed and exitTime events if the sensor is enabled and the viewer is inside the proximity region.

--- VRML separator bar ---

+TimeInterpolator

TimeInterpolator { 
  eventIn      SFFloat set_fraction       # (-,)
  exposedField MFFloat key           []   # (-,)
  exposedField MFTime  keyValue      []   # (-,)
  eventOut     SFTime  value_changed
}
The TimeInterpolator node interpolates among a list of time values specified in the keyValue field. This interpolator is appropriate for a animated tour through valid time by routing the eventOut to a Viewpoint node. The keyValue field shall contain exactly as many time points as there are keyframes in the key field.

A more detailed discussion of interpolators is provided in 4.6.8, Interpolator nodes.

--- VRML separator bar ---

+ValidPeriod

ValidPeriod { 
  exposedField SFBool     loop           FALSE
  exposedField MFTime     period         []       # (-,)
  exposedField SFTime     periodOffset   0.0      # (-,)
  exposedField SFNode     reference      NULL
  exposedField SFBool     fromStartOfRef TRUE
}
ValidPeriod nodes are designed for the definition of the validity of time variant nodes and its versions (e.g. History)(see time invariant and time variant objects).

The ValidPeriod node defines the starting and ending time points of the consecutive version time periods of a node's valid period: Let n time points t0, t1, t2, ..., tn-1partition the time domain (-infinity, + infinity) into n+1 subintervals given by (-infinity, t0), [t0, t1), [t1, t2), ... , [tn-1, +infinity) each subinterval defines one version time period and the interval [t0, tn-1) defines the valid period of a time variant node. For each subinterval in the valid period a version may be defined. Normally in the subintervals (-infinity, t0) and [tn-1, +infinity) the node dosen't exist, i.e. no version is valid.

For a valid period at least two time points have to be defined. Sometimes one node version is valid only at one discrete time point. For this special case a closed subinterval [ti] may be defined in the valid period which automatically changes the following subinterval from a closed-open subinterval in a open subinterval: ... , [ti], (ti, ti+1), ... .

All starting time points of version time periods are defined in relation to an local time origin. This time origin is defined by the global time origin of the time dimension or by the starting or ending time of another valid period (field reference and field fromStartOfRef). Additionally, an time offset may be defined in the field periodOffset. Then, the field period defines the intervals between the starting time points and this time offset. The field loop specifies if the valid period is periodically, i.e. after the last version time period of the valid period the first, second, etc. version time period is valid again.

If period field is empty or has only one value no valid period is defined and this is equal to an unspecified ValidPeriod node.

--- VRML separator bar ---

+ValidTimeSensor

ValidTimeSensor { 
  exposedField SFBool   enabled       TRUE
  exposedField SFNode   validPeriod   NULL
  eventOut     SFFloat  fraction_changed      # -1,[0,]
  eventOut     SFBool   isActive
  eventOut     SFTime   validTime
}
ValidTimeSensor nodes generate events as the current valid time passes, i.e. the current valid time point changes (either by navigation or by executing the world). ValidTimeSensor nodes can be used for driving continuous simulations triggered by valid time. One application is, combined with an interpolator, the simulation of time series values.

A valid time sensor is enabled or disabled by sending it an enabled event with a value of TRUE or FALSE. A disabled sensor does not send events.

The ValidTimeSensor node contains one discrete eventOut: isActive. The isActive eventOut sends TRUE when the valid period of the sensor given by validPeriod field starts containing the current valid time point, and FALSE when the current valid time point exits this valid period. The other two eventOuts generate continuous events. The fraction_changed eventOut sends an SFFloat in the interval [0,n] (n: the number of version time periods in the valid period), which is defined as i+r, the completed fraction r (in [0,1]) of the specific version time period i of the valid period. If the current valid time is lower than the valid period fraction_changed sends -1, and if higher it sends n (number of version time periods in the valid period). The validTime eventOut sends the absolute value of the current valid time point (represents the number of seconds since midnight GMT January 1, 1970, see SFTime).

The validPeriod field, if specified, shall contain a ValidPeriod node defining the period when this sensor is valid. Normally the ValidPeriod node contains different consecutive version time periods. If the validPeriod field is NULL or unspecified the ValidTimeSensor is in a time invariant state and sends a 0.0 event by fraction_changed regardless of the current valid time point.

--- VRML separator bar ---

+Viewpoint

Viewpoint { 
  eventIn      SFBool     set_bind
  exposedField SFFloat    fieldOfView    0.785398  # (0,)
  exposedField SFBool     jump           TRUE
  exposedField SFRotation orientation    0 0 1 0   # [-1,1],(-,)
  exposedField SFVec3f    position       0 0 10    # (-,)
  exposedField SFTime     validTime      0.000001  # (-,)     # new
  field        SFString   description    ""
  eventOut     SFTime     bindTime
  eventOut     SFBool     isBound
}
See also 6.53, Viewpoint in the VRML97 Specification. In addition to the VRML97 Specification the Viewpoint node has one more field, validTime, to define the current valid tiem point.

The Viewpoint node defines not only a specific location in the local coordinate system but also a specific valid time point at which the user may view the scene. An author can automatically move the user's view through the world's space and time by binding the user to a Viewpoint node and then animating the Viewpoint node. Moving in valid time is done by animating the validTime field with a TimeInterpolator node. Browsers shall allow the user view to be navigated relative to the valid time point defined by the Viewpoint node even if the Viewpoint node is being animated (see Viewing model).

If the validTime field is set to the default value no current valid time point is set. Then, the node's behaviour is equivalent to that defined in 6.53, Viewpoint.

Viewpoint nodes are bindable children nodes (see 4.6.10, Bindable children nodes) and thus there exists a Viewpoint node stack in the browser in which the top-most Viewpoint node on the stack is the currently active Viewpoint node.

The jump field specifies whether the user's view "jumps" to the position, orientation and current valid time point of a bound Viewpoint node or remains unchanged. This jump is instantaneous and discontinuous in that no collisions are performed and no ProximitySensor nodes are checked in between the starting and ending jump points. If the user's position before the jump is inside the space time region of a ProximitySensor the exitTime of that sensor shall send the same timestamp as the bind eventIn. Similarly, if the user's position after the jump is inside the space time region of a ProximitySensor the enterTime of that sensor shall send the same timestamp as the bind eventIn. Regardless of the value of jump at bind time, the relative valid time between the user's view and the current Viewpoint node shall be stored with the current Viewpoint node for later use when un-jumping (i.e., popping the Viewpoint node binding stack from a Viewpoint node with jump TRUE).

--- VRML separator bar ---
For questions or comments contact Hartmut Luttermann.
Copyright © 1998-99 University of Siegen, Siegen, Germany.
Last update: 1.November 1999.

http://www-winfo.uni-siegen.de/vrmlHistory/docs/partVH/nodesRef.html