Pointing device sensor component

This component defines nodes to interact with a pointing device (a mouse). TouchSensor allows to catch click events on 3D objects. Drag sensors allow user to edit a transformation of 3D objects: PlaneSensor allows to move objects, SphereSensor allows to rotate objects, and CylinderSensor allows to rotate objects around a constrained axis.

See also X3D specification of the Pointing device sensor component.


1. Demos

For demos and tests of these features, see the sensors_pointing_device subdirectory inside our VRML/X3D demo models.

2. Supported nodes

  • TouchSensor (API reference)

    Catch click events on 3D objects. The main functionality is that it sends touchTime event when the user "clicked" the geometry that is sibling to the sensor. See examples/viewport_and_scenes/listen_on_x3d_events/ for a demo how to handle it in Pascal.

    Full support, including:

    • hitTexCoord_changed event. You should apply some texture on your shape, otherwise texture coordinates will not be geneted (and this event will always generate zero vector).

      Note that it's only a single 2D texture coordinate. If you use volumetric 3D textures (from DDS file), the additional texture coordinate components will be ignored. If you use multi-texturing, the additional texture units (above the first) will be ignored.

    • hitNormal_changed event. Generates nice smooth normals when the shape is smooth (e.g. creaseAngle > 0).

      Note: Normals output by hitNormal_changed are in the shape local coordinate system. Spec doesn't say in which coordinate system they should be, please report if you have any idea what is expected / what other browsers do.

  • PlaneSensor (API reference)

    Move geometry by dragging.

    Note: when axisRotation with non-zero rotation is used, trackPoint_changed is generated in local sensor coordinates (with transformation and axisRotation applied), just like translation_changed.

    Note: that axisRotation is still useful, it is not a shortcut for using Transform with rotation around the sensor. Reason: wrapping sensor in a Transform would change it's siblings. So axisRotation is useful under our interpretation.

  • SphereSensor (API reference)

  • Rotate geometry freely by dragging.

  • CylinderSensor (API reference)

    Rotate geometry around an axis by dragging.

    Note: See PlaneSensor notes about axisRotation, they apply also here.