IRVE Components -

VRML definitions

Samples of these components in action can be seen in PathSim Visualizer, and the stimuli content used in two recent studies (Object / Viewport ; Object / Display)
The studies use data in the ../Molecules folder as well as ../text_imgs directories

 Annotation 'Panels'

Type
link- basic
link - slidable
Example
Text : Unstructured
EXTERNPROTO panel [
    field SFFloat ymargin #.25
    field MFString family #"SANS"
    field MFString justify #'BEGIN'    'MIDDLE' 'END'
    field    SFString style      
    field SFFloat fontspacing #1
    field SFFloat capsfactor #1
    exposedField MFString message #["hello", "world"]
    exposedField SFColor tcolor  #0 0 0
    field SFBool haspanel 
    exposedField SFColor pcolor #1 1 1
    exposedField SFFloat ptransp #.4
    exposedField SFVec3f position #0 0 0   
] ["../Protos/textpanel.wrl"]
EXTERNPROTO panel_drag [
    field SFFloat xmag #1
    field SFFloat ymag #1
    exposedField SFBool    psEnabled #TRUE
    exposedField SFVec2f psMaxPosition#     -1 -1
    exposedField SFVec2f psMinPosition# 0 0
    exposedField SFVec3f psOffset #0 0 0
    eventOut SFBool    psActive
    eventOut SFVec3f psTrackpt
    eventOut SFVec3f magPt
    field SFFloat ymargin #.25
    field MFString family #"SANS"
    field MFString justify #'BEGIN'    'MIDDLE' 'END'
    field    SFString style      
    field SFFloat fontspacing #1
    field SFFloat capsfactor #1
    exposedField MFString message #["hello", "world"]
    exposedField SFColor tcolor  #0 0 0
    field SFBool haspanel 
    exposedField SFColor pcolor #1 1 1
    exposedField SFFloat ptransp #.4
    exposedField SFVec3f position #0 0 0
    exposedField SFFloat maxExtent   
] ["../Protos/textpanel-b_slide.wrl"]

Text : Field-Value pair
EXTERNPROTO panel [
    field SFFloat ymargin #0
    field MFString family #"SANS"
    field SFString style #"PLAIN"   
    field MFString justify #"BEGIN"
    field SFFloat fontspacing #.85
    field SFFloat capsfactor #1
     field SFBool haspanel #TRUE
    exposedField MFString title #["Tonsil"]
    exposedField MFString      field_names    #["B:","naiveB:","T-lytic:"]
    exposedField    MFString      field_values    #    ["0","10","000"]   
    exposedField SFColor tcolor #0 0 0
    exposedField SFColor pcolor #1 1 1
    exposedField SFFloat ptransp #.4
    exposedField SFVec3f position #0 0 0   
    eventIn    MFString change_message
]["../Protos/textpanel2a.wrl"]


Image:
.jpg, .png, .gif
EXTERNPROTO ImagePanel
[exposedField MFString img #"3DEZ_110h.jpg"
  field SFBool repeatS #TRUE
  field SFBool repeatT #TRUE
  field SFVec2f tscal # 1 2
] ["../Protos/imagepanel.wrl"]
EXTERNPROTO ImagePanel
[  exposedField MFString    img #"3DEZ_110h.jpg"
  field SFBool repeatS #TRUE
  field SFBool repeatT #TRUE
  field SFVec2f tscal # 1 2
  eventOut SFVec3f magPt
  field SFFloat xmag #1
  field SFFloat ymag #1
]    ["../Protos/imagepanel_slide.wrl"]

Movie
 (can include audio; click to start)
.mpg (1) ... .mov?
PROTO MoviePanel
[  exposedField MFString    mov "../bilbo5.mov"
  field SFBool repeatS TRUE
    field SFBool repeatT TRUE
    field SFVec2f tscal 1 2
    #eventIn    SFTime start
] ["../Protos/moviepanel.wrl"]


Audio Clip:
.wav; MIDI




Graphs

Type


Example
Popview :
toggling bar graph / field-value text for PathSim (7 agents populations)
EXTERNPROTO popview [
    field SFFloat ymargin #0
    field MFString family #"SANS"
    field SFString style #"PLAIN"   
    field MFString justify #"BEGIN"
    field SFFloat fontspacing #.85
    field SFFloat capsfactor #1
     field SFBool haspanel #TRUE
    exposedField MFString title #["Tonsil"]
    exposedField MFString      field_names           #["B:","naiveB:","T-lytic:"]
    exposedField    MFString      field_values   
    #    ["0","10","000"]   
    exposedField SFColor tcolor #0 0 0
    exposedField SFColor pcolor #1 1 1
    exposedField SFFloat ptransp #.4
    exposedField SFVec3f position #0 0 0   
    eventIn    MFString change_message
        eventIn    MFFloat    change_hist
]["../Protos/popview.wrl"]



Linegraphs: Axis
EXTERNPROTO XAxis [
     field SFFloat begin_label #0
     field SFFloat end_label #10
     field SFFloat interval #1
     field MFString    axis_label  #"Crop Yield"
     field SFColor lin_color #0 0 0
    # field SFFloat end 0
 ]            ["../Protos/XAxis2.wrl"]
EXTERNPROTO YAxis [
     field SFFloat begin_label #0
     field SFFloat end_label #10
     field SFFloat interval #1
     field MFString    axis_label #"Crop Yield"
     field SFColor lin_color #0 0 0
    # field SFFloat end 0
]          ["../Protos/YAxis2.wrl"]
EXTERNPROTO ZAxis [
     field SFFloat begin_label #0
     field SFFloat end_label #10
     field SFFloat interval #1
     field MFString    axis_label #"Crop Yield"
     field SFColor lin_color #0 0 0
    # field SFFloat end 0
]      ["../Protos/ZAxis2.wrl"]

Linegraph: dataline
EXTERNPROTO dataline [
    field SFString point_shape #"Shape {}"
    field MFVec3f points #[]
      field SFColor lin_color #0 0
      # these are the 3 values used per axis0
      field    SFVec3f    x_scaling #0 10 1       
      field    SFVec3f    y_scaling #0 10 1
      field    SFVec3f    z_scaling #0 10 1                          
  ] ["../Protos/dataline.wrl"]



3 D Linegraph examples




3D scatterplots and histograms - simple examples
Extrusion as linegraph





Semantic Objects

Semantic Objects:

Type



Relative Infoposition  - no selection, proximity-based
EXTERNPROTO semanticObject1_noC [
 field MFFloat geoRange #[]
 field MFFloat infoRange #[]
 field MFNode geoLevel #[]
 field MFNode infoLevel #[]
 # no access to change the LOD children during runtime; X3D AMD 1
 field SFBool hasLine
 field SFBool constantSize
 field SFBool periodicSize
 field SFFloat anoscale
 field SFBool clicktoHUD #FALSE
 field SFBool clicktoOverlay #FALSE
  exposedField MFString link #["http://www.3dez.net"]
 exposedField MFString parameter #[""]
 exposedField SFVec3f position #0 0 0
 exposedField SFRotation rotation #0 0 0 0
 exposedField SFVec3f infoposition #2 1 0
 exposedField SFColor linecolor #1 1 1
 eventOut SFInt32 activegeoLevel
 eventOut SFInt32 activeinfoLevel
 eventOut SFFloat modulatedSpeed  # not used yet
 eventOut MFNode auxinfo
]["../Protos/SemanticObj1_on.wrl"]


Relative Infoposition -
selection toggles annotation visibility;


default = visible
EXTERNPROTO semanticObject1 [
    field MFFloat geoRange #[]
    field MFFloat infoRange #[]
    field MFNode    geoLevel #[]
    field MFNode    infoLevel #[]
   
# no access to change the LOD children during runtime; X3D AMD 1
    field SFBool hasLine
    field SFBool constantSize
    field SFBool periodicSize
    field SFFloat anoscale
    field SFBool clicktoHUD #FALSE
    field SFBool clicktoOverlay #FALSE
    exposedField MFString link #["http://www.3dez.net"]
    exposedField MFString parameter #[""]
    exposedField SFVec3f position #0 0 0
    exposedField SFRotation    rotation #0 0 0 0
    exposedField SFVec3f infoposition    #2 1 0
    exposedField SFColor linecolor #1 1 1
    eventOut SFInt32 activegeoLevel
    eventOut SFInt32 activeinfoLevel
    eventOut SFFloat modulatedSpeed     # not used yet
    eventOut MFNode    auxinfo
]["../Protos/SemanticObj1_C_on.wrl"]

default = invisible
EXTERNPROTO semanticObject1C [
    field MFFloat geoRange #[]
    field MFFloat infoRange #[]
    field MFNode    geoLevel #[]
    field MFNode    infoLevel #[]
    # no access to change the LOD children during runtime; X3D AMD 1
    field SFBool hasLine
    field SFBool constantSize
    field SFBool periodicSize
    field SFFloat anoscale
    field SFBool clicktoHUD #FALSE
    field SFBool clicktoOverlay #FALSE
    field SFVec3f lineO
    exposedField MFString link #["http://www.3dez.net"]
    exposedField MFString parameter #[""]
    exposedField SFVec3f position #0 0 0
    exposedField SFRotation    rotation #0 0 0 0
    exposedField SFVec3f infoposition    #2 1 0
    exposedField SFColor linecolor #1 1 1
    eventOut SFInt32 activegeoLevel
    eventOut SFInt32 activeinfoLevel
    eventOut SFFloat modulatedSpeed     # not used yet
    eventOut MFNode    auxinfo
]["../Protos/SemanticObj1_C.wrl"]
Snap Object (basic)-
supports highlighting geometry from events

See also general layout for a Snap scene...


EXTERNPROTO SnapObject [
     eventIn SFBool load      
               # manifest in senegraph or get annotation details on demand
     eventIn SFBool    select      
               # highlight/wireframe or show annotation details on demand...
     eventIn SFBool    scroll      
    # animate a viewpoint to or including  this object
     eventIn SFBool  filter     
   # this is at the snap component level, maybe to only draw certain records
     eventOut SFTime touchTime
    #field MFFloat geoRange []
    #field MFFloat infoRange []
    #field MFNode    geoLevel []
    #field MFNode    infoLevel []
     field SFNode geometry    #Group{}       
               # let's use Group {} or Shape {} for now ....
     field SFNode selectedGeometry    #Group{}
    exposedField SFVec3f position #0 0 0
    exposedField SFRotation    rotation #0 0 0 0
    #field MFFloat geoRange
]["../Protos/SnapObjectnoT.wrl"]

2
Annotation layout at closest corner point -
developer can define all 8 points for the bounds, as well as an offset
EXTERNPROTO semanticObject2 [
    field MFFloat geoRange #[]
    field MFFloat infoRange #[]
    field MFNode    geoLevel #[]
    field MFNode    infoLevel #[]
    # no access to change the LOD children during runtime; X3D AMD 1
    field SFBool hasLine
    field SFBool constantSize
    field SFBool periodicSize
    field SFFloat anoscale
    field SFBool clicktoHUD #FALSE
    field SFBool clicktoOverlay #FALSE
    field MFVec3f maxBoundingBox
    field SFFloat obInfoOffset
    exposedField MFString link #["http://www.3dez.net"]
    exposedField MFString parameter #[""]
    exposedField SFVec3f position #0 0 0
    exposedField SFRotation    rotation #0 0 0 0
    exposedField SFVec3f infoposition    #2 1 0
    exposedField SFColor linecolor #1 1 1
    eventOut SFInt32 activegeoLevel
    eventOut SFInt32 activeinfoLevel
    eventOut SFFloat modulatedSpeed     # not used yet
    eventOut MFNode    auxinfo
]["../Protos/SemanticObj2.wrl"]

3
Panel location on spherical bounds  (needs work ... offset?)

EXTERNPROTO semanticObject3 [ # this it the spherical
field MFFloat geoRange #[]
field MFFloat infoRange #[]
field MFNode geoLevel #[]
field MFNode infoLevel #[]
field SFBool hasLine
field SFBool constantSize
field SFBool periodicSize
field SFFloat anoscale
field SFBool clicktoHUD #FALSE
field SFBool clicktoOverlay #FALSE
field SFFloat obInfoOffset
field SFVec3f lineO
exposedField MFString link #["http://www.3dez.net"]
exposedField MFString parameter #[""]
exposedField SFVec3f position #0 0 0
exposedField SFRotation rotation #0 0 0 0
field SFVec3f infoposition #2 1 0
exposedField SFColor linecolor #1 1 1
eventOut SFInt32 activegeoLevel
eventOut SFInt32 activeinfoLevel
eventOut SFFloat modulatedSpeed # not used yet
eventOut MFNode auxinfo
]["
../Protos/SemanticObj3.wrl"]


4
Emergent behavior with 'flocking' infopanel positions -

panels tend toward nearest box corner (goal) & avoid other Semantic Objects
(boid algorithm adapted from P. Gerstman, Ohio State U;
Requires extra script and ROUTES to funtion correctly)

See http://csgrad.cs.vt.edu/%7Enpolys/VE/IRVE_Project/SemanticObj4.html
5
Semantic Object: HUD
Note:
This behavior requires using an auto-sized HUD and a HUDManager Script {} to initialize and update all Semantic Objects to their annotation's position on the HUD
EXTERNPROTO Semantic_obj_hud [
    field MFFloat geoRange #[]
    field MFFloat infoRange #[]
    field MFNode    geoLevel #[]
    field MFNode    infoLevel #[]
    field SFBool hasLine
    field SFBool constantSize
    field SFBool periodicSize
    field SFFloat anoscale
    field SFBool clicktoHUD #FALSE
    field SFBool clicktoOverlay #FALSE
    exposedField MFString link #["http://www.3dez.net"]
    exposedField MFString parameter #[""]
    exposedField SFVec3f position #0 0 0
    exposedField SFRotation    rotation #0 0 0 0
    exposedField SFColor linecolor #1 1 1
    eventOut SFInt32 activegeoLevel
    eventOut SFInt32 activeinfoLevel
    eventOut SFFloat modulatedSpeed     # not used yet
    eventIn SFVec3f hud_offset
    eventIn SFVec3f hud_scale
    eventIn    SFVec3f    hud_pos      #  may delete, now list
    field SFVec3f infoPosition
    eventIn    MFFloat    hudList
    field SFInt32 index #0
     eventOut SFInt32    clicked   
]["../Protos/Semantic_obj_hudc_slide.wrl"]



Animations Tools / Sequencers

Note:
 animation keys are written in the PROTO definition in anipack.wrl;
this for PathSim efficiency.




String Sequencer

EXTERNPROTO Str_Sequencer [
#    field MFFloat key #[0, 1]
    field SFInt32 batch #1
    field MFString field_values #[]
    eventIn    SFFloat    set_fraction
    eventOut MFString value_changed
]     ["../Protos/anipack.wrl#Str_Sequencer"]


Float Sequencer
EXTERNPROTO Str_Sequencer [
#    field MFFloat key #[0, 1]
    field SFInt32 batch #1
    field MFString field_values #[]
    eventIn    SFFloat    set_fraction
    eventOut MFString value_changed
]     ["../Protos/anipack.wrl#Str_Sequencer"]


Scalar Intperpolator (wrapped)
EXTERNPROTO SCALA [
    exposedField MFFloat keyValue      
    eventIn    SFFloat    set_fraction     
    eventOut SFFloat value_changed 
]["../Protos/anipack.wrl#SCALA"]


Color Interpolator (wrapped)

EXTERNPROTO    COLO [
    exposedField MFColor keyValue
    eventIn    SFFloat    set_fraction
    eventOut SFColor value_changed
]["../Protos/anipack.wrl#COLO"]






BooleanFilter
EXTERNPROTO BooleanFilter [
  # [appinfo] BooleanFilter selectively passes true, false or negated events.
  eventIn SFBool set_boolean # [appinfo] set_boolean is the input value to be filtered.
  eventOut SFBool inputTrue # [appinfo] inputTrue only passes a true value, when set_boolean input is true.
  eventOut SFBool inputFalse # [appinfo] inputFalse only passes a false value, when set_boolean is false.
  eventOut SFBool inputNegate # [appinfo] inputNegate provides opposite value by negating set_boolean input.
] [../Protos/EventUtilityPrototypes.wrl#BooleanFilter]


BooleanToggle PROTO BooleanToggle [
  # [appinfo] BooleanToggle maintains state and negates output when a true input is provided.
  eventIn SFBool set_boolean # [appinfo] If set_boolean input is true, toggle state.
  # warning: toggle depends on exposedField functionality in Script node, not compatible with VRML 97.
  # implemented as inputOnly/initializeOnly/outputOnly triplet.
  eventIn SFBool set_toggle # [appinfo] Reset persistent state value.
  field SFBool toggle  # FALSE # [appinfo] Persistent state value that gets toggled or reset.
  eventOut SFBool toggle_changed # [appinfo] Output toggled persistent state value.
] [../Protos/EventUtilityPrototypes.wrl#BooleanToggle]


BooleanTrigger EXTERNPROTO BooleanTrigger [
  # [appinfo] BooleanTrigger converts time events to boolean true events.
  eventIn SFTime set_triggerTime # [appinfo] set_triggerTime provides input time event, typical event sent is TouchSensor touchTime.
  eventOut SFBool triggerTrue # [appinfo] triggerTrue outputs a true value whenever a triggerTime event is received.
] [../Protos/EventUtilityPrototypes.wrl#BooleanTrigger]


IntegerTrigger EXTERNPROTO IntegerTrigger [
  # [appinfo] IntegerTrigger converts boolean true or time input events to integer value (suitable for Switch node).
  eventIn SFBool set_boolean # [appinfo] If set_boolean input is true, trigger output of integer value.
  eventIn SFInt32 set_integerKey # [appinfo] Resets value used for output when triggered later.
  exposedField SFInt32   integerKey     #-1 # [appinfo] integerKey is value for output when triggered.
  eventOut SFInt32 integerKey_changed # [appinfo] Reports change in integerKey value.
  eventOut SFInt32 triggerValue
   # [appinfo] triggerValue provides integer event output matching integerKey when true set_boolean received.
] [../Protos/EventUtilityPrototypes.wrl#IntegerTrigger ]


TimeTrigger EXTERNPROTO TimeTrigger [
  # [appinfo] TimeTrigger converts boolean true events to time events.
  eventIn SFBool set_boolean # [appinfo] If set_boolean input is true, trigger output time value.
  eventOut SFTime triggerTime # [appinfo] triggerTime is output time event, sent when set_boolean input is true.
] [../Protos/EventUtilityPrototypes.wrl#TimeTrigger ]





Heads-Up-Displays & Interfaces

Type


Basic
EXTERNPROTO HUD [
    exposedField SFVec3f offset #0 0 -.5
    exposedField SFVec3f scal #1 1 1
    exposedField MFNode    chile #[Group    {}]
]["../Protos/hud.wrl#HUD"]

Auto_size:
uses the offset to scale the HUD space to 10 M on its shortest side
for ViewPoint fOV = 1.047 radians
EXTERNPROTO    auto_HUD [           
        field SFVec3f offset #0 0 0
    exposedField SFVec3f scal # 1 1 1
    exposedField MFNode    chile #[Group    {}]
    exposedField MFFloat ASize     #[0.25, 1.6, 0.75]
    exposedField SFFloat    fieldOfView   # 0.785398
    eventOut SFVec3f offsetOut
    eventOut SFVec3f scale
]["../Protos/auto_hud2b.wrl"]
for ViewPoint fOV = 1.74 radians
EXTERNPROTO    auto_HUD [           
        field SFVec3f offset #0 0 0
    exposedField SFVec3f scal # 1 1 1
    exposedField MFNode    chile #[Group    {}]
    exposedField MFFloat ASize     #[0.25, 1.6, 0.75]
    exposedField SFFloat    fieldOfView   # 0.785398
    eventOut SFVec3f offsetOut
    eventOut SFVec3f scale
]
["../Protos/auto_hud3b.wrl"]
Viewport workspace
see Semantic Object HUD and ROUTES for  HUDManager Script

DEF    HUDManager Script {          # assumes larger h dim and panels of 4 x 2
    eventIn    SFInt32 aClick         #gets the index of a semantic obnject toggled by click
   field MFString containerOrder ["N", "S", "E", "W"]  
   field SFInt32 containerCapacity 4
   field SFInt32 state 0   # of the directions
   field SFString CC "N"   # the current container
   field SFInt32 numChildren   0    # in a container
   field MFInt32 nGrp []
   field MFInt32 sGrp []
   field MFInt32 eGrp []
   field MFInt32 wGrp []
   field MFFloat layoutStruct []
   field SFVec3f nO 0 0 0
   field SFVec3f sO 0 0 0
   field SFVec3f eO 0 0 0
   field SFVec3f wO 0 0 0
   field SFFloat hI 5.1
   field SFFloat vI 2.1
   eventOut    MFFloat    posList
url    "javascript: ..."
}

Gyroscope
EXTERNPROTO HUD_gyro [
    exposedField SFVec3f offset #0 0 -.5
    exposedField SFVec3f scal #1 1 1
    exposedField MFNode    childs
]  ["../Protos/hud.wrl#HUD_gyro"]

Position
/Orientation printer (to console)
(original Daly)
 EXTERNPROTO ViewPositionOrientation [
  exposedField SFBool enabled
# [appinfo] Whether or not ViewPositionOrientation sends output to console.
  field SFBool traceEnabled
# [appinfo] Output internal trace messages for debugging this node - developer use only, can be ignored.
  eventIn SFBool set_traceEnabled
 # [appinfo] Ability to turn output tracing on/off at runtime.
  eventOut SFVec3f position_changed
# [appinfo] Output local position.
   eventOut SFRotation orientation_changed
# [appinfo] Output local orientation.
   eventOut MFString outputViewpointString
# [appinfo] MFString value of new Viewpoint,
    # for example: <Viewpoint position="20 15 20" orientation="-0.516 0.83 0.212 0.9195"/>
][
  "../Protos/ViewPositionOrientationPrototype.wrl#ViewPositionOrientation"
  "/www.web3d.org/x3d/content/examples/Savage/Tools/Authoring/ViewPositionOrientationPrototype.wrl#ViewPositionOrientation"
  "http://web.nps.navy.mil/~brutzman/Savage/Tools/Authoring/ViewPositionOrientationPrototype.wrl#ViewPositionOrientation"
  "../../Tools/Authoring/ViewPositionOrientationPrototype.x3d#ViewPositionOrientation"
  "/www.web3d.org/x3d/content/examples/Savage/Tools/Authoring/ViewPositionOrientationPrototype.x3d#ViewPositionOrientation"
  "http://web.nps.navy.mil/~brutzman/Savage/Tools/Authoring/ViewPositionOrientationPrototype.x3d#ViewPositionOrientation"
 "file:///c:/www.web3d.org/x3d/content/examples/Savage/Tools/Authoring/ViewPositionOrientationPrototype.wrl#ViewPositionOrientation"
]
                                                                                                             
DVD Controller
(branch vrml fix, npolys; original NPS)
EXTERNPROTO DvdController [
  field SFString displayMode
# [appInfo] Initializes how control buttons and slider are displayed. The control buttons include DIS control (i.e. Master, Ghost, Local) and Playback control (i.e. Reset to Start, Fast Rewind, Rewind, Pause, Play, Fast Forward, Reset to End). Possible values are (case sensitive): ALL, DIS_ONLY, PLAYBACK_ONLY, SLIDER_ONLY, DIS_PLAYBACK, DIS_SLIDER, PLAYBACK_SLIDER, and NONE.
  eventIn SFString setDisplayMode
# [appInfo] Sets how control buttons and slider are displayed. The control buttons include DIS control (i.e. Master, Ghost, Local) and Playback control (i.e. Reset to Start, Fast Rewind, Rewind, Pause, Play, Fast Forward, Reset to End). Possible values are (case sensitive): ALL, DIS_ONLY, PLAYBACK_ONLY, SLIDER_ONLY, DIS_PLAYBACK, DIS_SLIDER, PLAYBACK_SLIDER, and NONE.
  field SFBool playEnabled
  field SFColor buttonColor
  field SFColor selectedButtonColor
  field SFColor labelColor
  field SFColor selectedLabelColor
  field SFVec3f locationOffset
  field SFBool clockEnabled
  field SFTime cycleInterval
  eventIn SFTime setCycleInterval
  eventOut SFTime cycleIntervalChanged
  field SFFloat speedFactor
  eventOut SFBool isActive
  eventOut SFTime startTimeChanged
  eventOut SFTime stopTimeChanged
  eventOut SFTime timeChanged
  eventOut SFFloat fractionChanged
  eventOut SFTime secondsElapsed
  eventOut SFBool isMaster
  eventOut SFBool isRemote
  eventOut SFBool isLocal
  eventOut SFBool isPaused
  eventOut SFBool isRunning
  field SFBool traceEnabled
][
  "../Protos/DvdControllerPrototype3.wrl#DvdController"
  ""
  "http://web.nps.navy.mil/~brutzman/Savage/Tools/HeadsUpDisplays/DvdControllerPrototype.wrl#DvdController"
  "http://web.nps.navy.mil/~brutzman/Savage/Tools/HeadsUpDisplays/DvdControllerPrototype.x3d#DvdController"
]

There are a lot of good protos here too in the Tools section!





© 2002-2005 Nicholas F. Polys
unless otherwise noted