VRML 2.0 browser Click here to browse the class hierarchy as it presently exists. (new!) Navigation: * Standard CAVE navigation. The speed field in NavigationInfo is used to adjust the speed of navigation. * The left wand button is the action button. The middle button pops up a hud using which you can switch between viewpoints, toggle the headlight and change worlds. * The right button cycles between the loaded worlds. However it will probably be used for something more useful. Things to note: * Add the line "Units meters" in your .caverc. VRML is in meters * Files are cached in /usr/tmp and are named mw*.* If, for some reason the browser crashes (hardly ever likely to happen :-) ), please delete the files there. * You can customize the interface by modifying hud.wrl. Nodes named _HeadLight_, _PreviousViewpoint_, NextViewpoint_, _PreviousWorld_, NextWorld_, when clicked on do the appropriate thing. * When retrieving file over the web, if a particular URL is bogus, the server probably will send back a HTML file saying "File not found". Since the browser doesn't speak HTTP yet, it will blindly attempt to parse the file and in all probability spit out VRML read error in /usr/tmp/mwDAAa003-K.wrl: File does not have a valid header string Occurred at line 2. * The mysterious agenda file resurfaces again! On start up the browser checks the current directory for this file and loads in all the worlds mentioned within. * Am using the donated VRMLScript parser. So VRMLScript is limited to what the parser can do. The good news is that it does most of the common things. * People debugging VRMLScript can use Math.printN to print out values. Ah, the luxuries of having an inhouse VRML developer. * If using vss on a different machine than the one you are running the browser on set TMPDIR to somewhere in your homedir and not in /usr/tmp. this is because vss needs the files to play them and they have to be accessible from the machine it is running on. Unimplemented Nodes These nodes are parsed correctly, but nothing useful happens. * Billboard * ElevationGrid * Extrusion * Fog * FontStyle * MovieTexture * Text * VisibilitySensor TODO * Grouping Nodes: Ignoring addChildren and removeChildren * Collision: * CylinderSensor: Ignoring diskAngle * TouchSensor: decision to select touchsensor from pfNode is flaky * Background: Textured backgrounds not supported yet * AudioClip, Soundsensor: Needs work * PointLight and Directional not limited to radius of influence. Directional Light not scoped Rant The Performer gang, in their infinite wisdom anticipated all possible file extensions for vrml files (eg. wrl and vrml) and aliased them all to Inventor. Thus if you want to use a different loader you'll have to name it something else counter-intuitive like .wrl2. ".world" was already taken :-). To get around this problem, you can either call the loader explicitly. The code would look like this... MwDB::init() sometime before pfConfig() pfGroup *root = new pfGroup; MwGroup *group = new MwGroup; MwInput in(fileName, new MwSceneState); MwMFNode m; MwDB::read(&in, m); group->addMFNodes(m); root->addChild(group->getPfNode()); return root; which is what pfdLoadFile_wrl does. The other way, which I like, is to redefine the functions extern void pfdInitAliases(void) { } extern void pfdAddExtAlias(const char *, const char *) { } in your program. To the best of my knowledge, they will only affect you in that you cant use aliases for other loaders, which is something you didnt want to do in the first place anyway. Thus no aliases would be added and .wrl files would search for pfdLoadFile_wrl() Last modified April 13, 1997, Swami