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