Grouping node that controls collision detection.
Action partially implemented for this node.
More...
#include <Inventor/VRMLnodes/SoVRMLCollision.h>
Public Member Functions | |
virtual SoType | getTypeId () const |
SoVRMLCollision () | |
SoVRMLCollision (int nChildren) | |
Static Public Member Functions | |
static SoType | getClassTypeId () |
Public Attributes | |
SoSFBool | collide |
SoSFBool | enabled |
SoSFNode | proxy |
SoSFTime | collideTime |
SoSFBool | isActive |
See the VRML97 Specification, below.
NOTE: This class does not exist in Open Inventor 10.0 and later.Note: This node is partially implemented. It functions correctly as a grouping node, but does not currently implement the collision detection feature.
IV_SEPARATOR_MAX_CACHES specifies the maximum number of render caches. To disable caching entirely, set it to 0. (This can reduce memory requirements at the cost of degraded performance.) See SoSeparator for additional information on caching in general, and SoVRMLGroup for information on the CacheEnabled enum values.
This section may reference portions of the VRML97 specification that are not present in this help file. The complete VRML97 spec is available at http://www.web3d.org .
By default, all objects in the scene are collidable . The browser must detect geometric collisions between the user's avatar (see SoVRMLNavigationInfo) and the scene's geometry, and prevent the avatar from 'entering' the geometry. The SoVRMLCollision node is a grouping node that may turn off collision detection for its descendants, specify alternative objects to use for collision detection, and send events signalling that a collision has occurred between the user's avatar and the SoVRMLCollision group's geometry or alternate. If there are no SoVRMLCollision nodes specified in a scene, browsers must detect collision with all objects during navigation.
See the "Concepts - Grouping and Children Nodes" section for a description the children , addChildren , and removeChildren fields and eventIns.
The SoVRMLCollision node's collide field enables and disables collision detection. If collide is set to FALSE, the children and all descendants of the SoVRMLCollision node will not be checked for collision, even though they are drawn. This includes any descendant SoVRMLCollision nodes that have collide set to TRUE - (i.e., setting collide to FALSE turns it off for every node below it).
SoVRMLCollision nodes with the collide field set to TRUE detect the nearest collision with their descendant geometry (or proxies). Note that not all geometry is collidable - see each geometry node's sections for details. When the nearest collision is detected, the collided SoVRMLCollision node sends the time of the collision through its collideTime eventOut. This behavior is recursive - if an SoVRMLCollision node contains a child, descendant, or proxy (see below) that is an SoVRMLCollision node, and both SoVRMLCollisions detect that a collision has occurred, then both send a collideTime event out at the same time, and so on.
The bboxCenter and bboxSize fields specify a bounding box that encloses the SoVRMLCollision's children. This is a hint that may be used for optimization purposes. If the specified bounding box is smaller than the actual bounding box of the children at any time, then the results are undefined. A default bboxSize value, (-1 -1 -1), implies that the bounding box is not specified and if needed must be calculated by the browser. See "Concepts - Bounding Boxes" for a description of the bboxCenter and bboxSize fields.
The collision proxy, defined in the proxy field, is a legal child node, (see "Concepts - Grouping and Children Nodes"), that is used as a substitute for the SoVRMLCollision's children during collision detection. The proxy is used strictly for collision detection - it is not drawn.
If the value of the collide field is FALSE, then collision detection is not performed with the children or proxy descendant nodes. If the root node of a scene is an SoVRMLCollision node with the collide field set to FALSE, then collision detection is disabled for the entire scene, regardless of whether descendant SoVRMLCollision nodes have set collide TRUE.
If the value of the collide field is TRUE and the proxy field is non-NULL, then the proxy field defines the scene which collision detection is performed. If the proxy value is NULL, the children of the collision node are collided against.
If proxy is specified, then any descendant children of the SoVRMLCollision node are ignored during collision detection. If children is empty, collide is TRUE and proxy is specified, then collision detection is done against the proxy but nothing is displayed (i.e., invisible collision objects).
The collideTime eventOut generates an event specifying the time when the user's avatar (see SoVRMLNavigationInfo) intersects the collidable children or proxy of the SoVRMLCollision node. An ideal implementation computes the exact time of intersection. Implementations may approximate the ideal by sampling the positions of collidable objects and the user. Refer to the SoVRMLNavigationInfo node for parameters that control the user's size.
Browsers are responsible for defining the navigation behavior when collisions occur. For example, when the user comes sufficiently close to an object to trigger a collision, the browser may have the user bounce off the object, come to a stop, or glide along the surface.
children | [] |
collide | TRUE // VRML97 only |
enabled | TRUE // X3D only |
bboxCenter | 0 0 0 |
bboxSize | -1 -1 -1 |
proxy | NULL (Note: Not implemented) |
metadata | NULL |
renderCaching | AUTO |
boundingBoxCaching | AUTO |
renderCulling | AUTO |
pickCulling | AUTO |
SoMFNode | addChildren |
SoMFNode | removeChildren |
SoMFNode | set_children |
SoSFBool | set_collide // VRML97 only (Note: Not implemented) |
SoSFBool | set_enabled // X3D only (Note: Not implemented) |
SoSFNode | set_metadata |
SoSFTime | collideTime (Note: Not implemented) |
SoMFNode | children_changed |
SoSFBool | collide_changed // VRML97 only (Note: Not implemented) |
SoSFBool | enabled_changed // X3D only (Note: Not implemented) |
SoSFNode | metadata_changed |
SoVRMLCollision::SoVRMLCollision | ( | ) |
Constructor.
SoVRMLCollision::SoVRMLCollision | ( | int | nChildren | ) |
Constructor that takes approximate number of children.
static SoType SoVRMLCollision::getClassTypeId | ( | ) | [static] |
Returns the type identifier for this class.
Reimplemented from SoVRMLGroup.
virtual SoType SoVRMLCollision::getTypeId | ( | ) | const [virtual] |
Returns the type identifier for this specific instance.
Reimplemented from SoVRMLGroup.
(Note: Not implemented) Enables (TRUE) or disables (FALSE) collision detection.
(VRML97 only)
Output event on collide time changes.
(Note: Not implemented) Enables (TRUE) or disables (FALSE) collision detection.
(X3D only)
NOTE: field available since Open Inventor 5.0NOTE 2: This field is not compatible with VRML97. If you specify a non-default value for this field, when this node is written to a VRML file, the file will contain this incompatible field and standard VRML97 file readers will not be able to read it.
Output event if active.
(Note: Not implemented) Child node that is used as a substitute for the SoVRMLCollision's children during collision detection.