#X3D V3.0 utf8 PROFILE Immersive # [X3D] version=3.0 # [X3D] noNamespaceSchemaLocation=https://www.web3d.org/specifications/x3d-3.0.xsd # X3D-to-ClassicVRML XSL translation autogenerated by X3dToClassicVrmlEncoding.xslt and X3dToVrml97.xslt # https://www.web3d.org/x3d/content/X3dToClassicVrmlEncoding.xslt # https://www.web3d.org/x3d/content/X3dToVrml97.xslt # Transformation using XSLT processor: Saxonica # head META "title" "CrossHairExample.x3d" META "description" "Example use of a heads-up display (HUD) crosshair showing center of screen, useful for assessing lookAt point." META "creator" "Don Brutzman" META "created" "1 February 2003" META "modified" "28 November 2019" META "identifier" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairExample.x3d" META "subject" "crosshair display" META "generator" "X3D-Edit 3.2, https://savage.nps.edu/X3D-Edit" META "license" "../../license.html" # [Scene] ========== ========== ========== # ======================== # Copy this ExternProtoDeclare and ProtoInstance for use in another scene WorldInfo { title "CrossHairExample.x3d" } EXTERNPROTO CrossHair [ # [appinfo] CrossHair prototype provides a heads-up display (HUD) crosshair at the view center, which is useful for assessing NavigationInfo lookAt point initializeOnly SFBool enabled # [appinfo] whether CrossHair prototype is enabled or not inputOnly SFBool set_enabled # [appinfo] control whether enabled/disabled inputOutput SFColor markerColor # [appinfo] color of CrossHair marker inputOutput SFVec3f scale # [appinfo] size of CrossHair in meters inputOutput SFVec3f positionOffsetFromCamera # [appinfo] distance in front of HUD viewpoint ][ "../../../Savage/Tools/HeadsUpDisplays/CrossHairPrototype.x3d#CrossHair" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairPrototype.x3d#CrossHair" "../../../Savage/Tools/HeadsUpDisplays/CrossHairPrototype.wrl#CrossHair" "https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairPrototype.wrl#CrossHair" ] DEF CrossHairInstance CrossHair { enabled TRUE markerColor 1 0.5 0 scale 1 1 1 positionOffsetFromCamera 0 0 -6 } # ======================== # Test scene and background, to see that HUD remains fixed relative to viewpoint. Viewpoint { description "walk and rotate to test heads-up display (HUD)" } Viewpoint { description "outside proximity box turns crosshair off" position 0 0 20 } NavigationInfo { speed 10 type [ "FLY" "ANY" ] } Background { skyColor [ 0.7 0.7 0.9 ] } Shape { geometry Text { string [ "Click text, zoom out/in," "or switch viewpoints to" "toggle CrossHair HUD" ] fontStyle FontStyle { justify [ "MIDDLE" "MIDDLE" ] } } appearance Appearance { material Material { diffuseColor 0.4 0.4 0.13 } } } # ======================== # Turn CrossHair on/off depending on toggling Box touch DEF TouchBox TouchSensor { description "touch to toggle CrossHair" } DEF TouchToggle BooleanToggle { } ROUTE TouchBox.isActive TO TouchToggle.set_boolean # TouchToggle toggle_changed should likely revert to TouchToggle toggle when inputOutput fields supported in Script, or native implementation provided. ROUTE TouchToggle.toggle_changed TO CrossHairInstance.set_enabled # ======================== # Turn CrossHair on/off depending on proximity to a target location Group { children [ DEF ProximityBox ProximitySensor { size 21 21 21 } DEF EnterProximityBox BooleanTrigger { } DEF ExitProximityBox BooleanTrigger { } DEF ExitFilter BooleanFilter { } ] ROUTE ProximityBox.enterTime TO EnterProximityBox.set_triggerTime ROUTE EnterProximityBox.triggerTrue TO CrossHairInstance.set_enabled ROUTE ProximityBox.exitTime TO ExitProximityBox.set_triggerTime ROUTE ExitProximityBox.triggerTrue TO ExitFilter.set_boolean ROUTE ExitFilter.inputNegate TO CrossHairInstance.set_enabled }