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.
Contents:
For demos and tests of these features,
see the sensors_pointing_device subdirectory inside our VRML/X3D demo models.
TouchSensor (Pascal API: TTouchSensorNode)
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 (Pascal API: TPlaneSensorNode)
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 (Pascal API: TSphereSensorNode)
Rotate geometry freely by dragging.
CylinderSensor (Pascal API: TCylinderSensorNode)
Rotate geometry around an axis by dragging.
Note: See PlaneSensor notes about axisRotation, they apply also here.