# Copyright (C) 1998 Tuomas J. Lukka
# DISTRIBUTED WITH NO WARRANTY, EXPRESS OR IMPLIED.
# See the GNU Library General Public License (file COPYING in the distribution)
# for conditions of use and redistribution, EXCEPT on the files 
# which belong under the mozilla public license.

Welcome to a developer-alpha release of VRML::Browser.
See below for what has changed.

For updates, see the FreeWRL homepage, currently at 
http://www.fas.harvard.edu/~lukka/freewrl

DO NOT EXPECT YOUR COMPLICATED WORLD TO WORK!
If your world doesn't expect *much* more than the browser provides
right now, please send me a copy -- I'll make it work in the next
version. 

Textures are probably the last thing I'm going to make really well --
if you want to change that, buy me a computer with Linux-supported
3D acceleration for textures and you'll find them working in the next
release (even lending a machine for some months would do) ;) ;) 
-- or just fix the implementation yourself. Same applies to a multi-threaded 
version and multi-CPU machines ;)

See the file INSTALL for how to compile this program.

After installation, try

	./freewrl tests/1.wrl

(the file browse is the perl script which starts the browser -- if
there is a problem ("file not found"), try

	perl browse tests/1.wrl

or change the first line of "browse" to find your perl binary).

This should open a new window with a view of the VRML world in question.

Use the first and third button of your mouse (while moving your mouse)
to move around.

To change viewers between walk and examine, press 'w' or 'e' or 'd' in 
the browser window ('d' only works with the keyboard currently).

There are more tests in the bt/ and jt/ and pt/ directories, which
are, respectively, the browser API tests, java/javascript tests and
perl API tests.

E-mail any comments, questions & patches to me at lukka@fas.harvard.edu

	Tuomas J. Lukka

P.s. I am available for employment after july 1999 - email me if your
university or company is interested. I would like to be able 
at the same time to continue free software development and research.

-----------------
V0.14 DOCUMENTATION!!!!!!!!!
 - manual pages, at last! Halleluyah!
 - more extrusion fixes from Bernhard Reiter
 - Viewer&Navigationinfo fixes from John Breen
 - added "-lz" into vrml.conf for PNG
 - new command line interface
   NOTE NOTE NOTE!!!!!!!!!!!
   YOU HAVE TO CHANGE YOUR XSWALLOW SETTINGS FOR THIS RELEASE
 - warn if file doesn't start with the proper header
 - moved many optional behaviours from environment variables
   to command-line options.
 - more verbosity cleanup
 - added warning for missing proper header, corrected headers of 
   example files
 - other, tiny things

V0.13 Java EAI, other tiny things. 
AS OF THIS RELEASE, ALL "MAJOR" COMPONENTS HAVE FRAMEWORKS IN PLACE.
AFTER THIS, ENHANCING FREEWRL WILL CONSIST OF FILLING OUT 
UNIMPLEMENTED BITS IN THE FRAMEWORK. I NEED HELP IN THIS; IF YOU
WANT TO GET TO FILL IN YOUR PIECE (and get mentioned in the CREDITS
file, the coolest place on the web ;), EMAIL ME!
 - better way of doing trig stuff from Robin Williams
 - make the 'v' and 'b' keys really *WORK* for changing viewpoints on fly
 - make viewpoint orientation finally work (Thanks to John Breen
   for telling me about it)
 - make MFFloat and MFInt32 parsing handle the case "5 , 3 , 2"
   correctly - thanks to Etienne Grossmann for noticing the bug
 - new Extrusion code by Bernhard Reiter
 - new option zpl=xx to set the farther z-buffer plane in case you 
   want to view extremely large worlds
 - first shot at Java EAI!
   Most things still do not work but it's a start. We are communicating.
   See java/eai/test.java for an example (it uses the VRML in eai/test2.wrl).
   This is my second Java program, and the first one that
   uses threads (the first java program was the Script interface ;).
   Please comment if I'm doing anything wrong.
   The second example (java/eai/test2.java, eai/test3.wrl) demonstrates
   how to both receive & send events.
 - Inlines should work again (oops ;)
 - complain if url is bad
 - PNG/PNG.xs *should* now work with perlapio as well....
 - first shot at working navigationinfo, but I didn't have time to
   test it yet...
Continuing compliance tests:
 - fixed lineset & pointset coloring behaviour
 - fixed unlit behaviour when no Material node present
 - fixed SFNode, MFNode PROTO fields (we need lots of really devious tests!)

V0.12 
 - EAI first attempt
   - protocol only, no Java classes yet
   - try it with "perl eai/t1.pl", which starts freewrl
     and uses sockets to communicate the color change event.
   - it works by giving a command-line argument "eai=host:port"
     to connect into.
   - sometimes the processes live after they should die - 
     kill them explicitly if this happens
 - clean up the JS verbosity a little..
 - allow "url=..." command-line argument to freewrl for setting
  the base url separate from file name (to allow use of inlines
  from inside Netscape).
 - fix sensors so that transformations won't affect dragging 
  (NIST PlaneSensor test 2)
 - fix examine viewer to take position given to it seriously
 - make top-level sensors work
 - fix x_changed and set_x names to work
 - let images be scaled
 - PNG support
 - cache URLs when loading - same texture several times
 - set next/previous viewpoint (use keys 'v', 'b')
 - fixed texture mapping a bit

NOTE: v0.11 is NOT PUBLICALLY ANNOUNCED and contains a lot of
unstable new stuff. Be careful with it. I'll follow with 0.12 soon.


V0.11 - Onset of promiscuity -- we can plugin to netscape!!!
      - lots of new, not-thoroughly-tested features
 - set window name to FreeWRL
 - final changes to make it possible to run freewrl from another
   directory - e.g. fonts so that we specify the font at startup and
   "use blib" conditionalized. Including
    FREEWRL_FONTS=... perl -Mblib=... freewrl "$1"
   into xswallow's dispatch-vrml did it! Yow! (remember to redirect
   stdout and stderr to some file (e.g. /tmp/VRMLlog) to see what went
   wrong - it's by no means foolproof and doesn't load even nearly all
   files)
   However, this is probably worth a screenshot!
   If you try it, remember to Edit/Preferences/Netscape/Applications
   in netscape to inform it that x-world/x-vrml is handled by the plugin.
   (if you have problems, email me)
 - plugging into netscape made me fix a variety of bugs because
   I can browse worlds easier.
 - rest of the Light nodes
 - VisibilitySensor (very dumb but compliant - always visible)
 - environment variable (I know, I should document them all in one place ;)
   FREEWRL_SAVE to specify a directory to save all the files/urls in the
   world (not the whole world, just the world you're looking at ;)
 - fixed CoordinateInterpolator initial value
 - fixed Interpolators initial state - no event to be sent.
 - first try at ProximitySensor
 - fixed SFInt32 parsing (oops)
 - ElevationGrid: colors!
 - TextureTransform (but not yet tested)
 - render sky correctly when only one skycolor given
 - Inlines work again

There is one big problem with the URLs: relative URLs don't work
from the 

V0.10 - Yea!
 - fixed YEQ, ZEQ tests for raycasting - sensors should be more
   reliable now when the ray is parallel to some axis. Oops.
   Thanks for Bernhard Reiter for the report.
 - VRML::Field::Multi ISA VRML::Field -> MF* things in PROTOs now
   work. Thanks to John Breen for the bug report and fix.
 - actually included tests/10.wrl (oops ;) 
 - viewpoint fixes galore - jump=TRUE viewpoints should now work
   completely. jump=FALSE is more difficult but luckily less used.
   Thanks to several people for bugging me about it ;)
 - box touchsensor now works properly even when looking on the xz plane
 - make an environment variable FREEWRL_NO_COLORMAP to prevent
   creation of window's own colormap - thanks to William R. Ward
 - more documentations / organizations in the source
 - new Walk viewer from John Breen
 - Events.pm: ToQueue so you can send events TO a node instead of just
   from

V0.09 - bugs & docs
 - fixed a bad parser bug, reported by Bernhard Reiter.
   now [1 1 1,2 2 2,3 3 3] works as it is supposed to.
 - commented VRMLC.pm and VRMLRend.pm
 - fixed prototypes & events -- now they should finally work
   closer to the spec
 - new demo: tests/10.wrl which was my challenge to myself to
   improve the javascript api to include SFVec3f and SFRotation
   functions.
 - as a result, JavaScript api now has SFVec3f and SFRotation
   methods ;)
 - now viewers should get the shift / control status as extra
   arguments - so the Descent mode is possible to do with mouse
   (as requested by John Breen).
   Didn't have time to improve the descent mode yet, though.

V0.08 - important details
 - using libwww-perl for getting documents from over the web.
   we can use general URLS, hurray!
   Because of this, perl scripts are now disabled by default
   because of security -- the code is completely trusted and
   we don't want you to get http://evil.foo/rm-rf.wrl containing
   a Perl script doing "system('rm -rf /'')".
 - use gunzip to decompress gzipped content
 - general ray code -- now IndexedFaceSet, ElevationGrid and even
   Extrusions should work with TouchSensors
 - "install" should now at least partially work. 
   Changed all "require 'foo.pm'" to "require VRML/foo.pm"
 - get_scene for the browser object -- now it is possible to
   create scenes in Perl scripts:
    "
    	use VRML::Browser;
	$b = new VRML::Browser;
	$s = $b->get_scene;
	$nod1 = $b->new_node(Shape, {
		geometry => $b->new_node(Box, { ... } ),
		...
	});
	...
	$s->topnodes([$nod1,$nod2,...]);
	$b->eventloop;
    "
   so you can use scripts to generate scenes.
 - then, use $scene->as_string to actually generate the VRML code
   in ASCII.
 - $backend->snapshot. See pt/* for samples
 - Documentation
 - Make the browser accept some faulty VRML (commas after field values)
 - Some portability fixes from John Breen and Lupe Christoph
 - fix IndexedFaceSet core dump if coordIndex doesn't end in -1
 - some event fixes. 

V0.07 - quick bug fixes
 - parse: make the optimization for MFFloat and MFTime correct when
   there are commas :(
 - fix FontStyle defaults
 - stabler quadratic solution from Robin Williams
 - background works again -- we can't displaylist something that moves ;)
 - better viewpoint implementation -- it still doesn't quite work
   like the spec. 

V0.06 - solidification:
 - input of SFColor etc. to javascript
 - output of floats etc. from javascript
 - numerous other bugfixes for javascript...
 - beginnings of the browser object in Perl
 - add OpenGL includes/defines for other makefiles as well..
 - Text should possibly be compatible with FreeType-1.1 now...
 - Fly mode, with key controls a la Descent(TM)!! Press 'D'
   when browsing and then use a,z and 789uiojklp; (the keys
   that are the numpad on my laptop ;) to move. If someone
   wants to send a patch to make the keys configurable, I'd be 
   delighted ( I don't want to spend time on that right now, I 
   have more important matters in this to do.. )
 - much faster MFFloat parsing -- similar speedups for other fields
   are just a matter of doing it..
 - various speed improvements
 - fixed use of display lists to actually work (blush)..

V0.05 - details...
 - Switch
 - LOD
 - face culling -> double speedup sometimes
 - DirectionalLight
 - PlaneSensor
 - SphereSensor
 - better support for bindable nodes
 - dummy Anchor ( == group )
 - add many missing fields (as dummies) to nodes

V0.04
Quick release, due to notification from Thomas Dudziak that
I had missed important files from the .tar.gz file. Oops...
 - Text!!!!!!! With FreeType library
 - Background basics (skyColor, skyAngle)
 - VRMLC -> VRMLC+VRMLRend - split to smaller files
 - Bindable nodes -- see nodes/Background2.wrl for what works now

V0.03 "filling in some blanks"
 - MFColor and other field types for javascript -- now able
   to run VRML97 spec example D.14!!


V0.02 "some things about *most* features work"
THIS RELEASE IS ESPECIALLY UNSTABLE - LOTS OF CODE HAS BEEN ADDED 
AND LOTS OF NEW FEATURES ARE SEMI-IMPLEMENTED. THERE ARE PROOF-OF-PRINCIPLE
JAVA AND JAVASCRIPT SCRIPTS BUT MOST OF THOSE SCRIPTING INTERFACES
ARE STILL UNIMPLEMENTED. THE PROOF-OF-PRINCIPLE SCRIPTS CAN BE FOUND
IN THE DIRECTORY jt/.

THE BROWSER IS STILL FAR FROM SPEC COMPLIANCE -- A LOT NEEDS TO BE DONE.
IF YOU ARE NOT ABLE TO PROGRAM, DO NOT EXPECT TO BE ABLE TO USE THIS
BROWSER YET. THIS RELEASE IS PRIMARILY MADE TO ATTRACT POTENTIAL
DEVELOPERS TO HACK ON THE CODE.

 WHAT EXTRA IS SUPPOSED TO WORK NOW
  - simple scripting in complex languages (java,javascript)
    (warning: this is very immature so far - it's my first ever java
    program and I've only been at it for a couple of days. You have to
    make a named pipes in the current directory with the name '.javapipep'
    and '.javapipej', with the command "mknod .javapipep p" or the equivalent
    on your system).
    For javascript, you'll need to hack it to compile yourself - I'll
    try to provide a better make system later.
  - simple complex uses of simple sensor (touchsensor hitpoint,
    although only for primitives yet (no indexedfaceset :(...))
    This is by raycasting now, see VRMLC.pm
  - simple textures: jpg only, and only 2**n * 2**n.
    also, most texture mappings of nodes are not yet correct
  - Extrusion, ElevationGrid
  - Billboard
  - Browser: die if file not openable
  - Parser: accept ROUTE et al in more contexts 
  - CoordinateInterpolator
  - IndexedLineSet and PointSet
  - Shape with appearance==NULL
  - Color, Normal
  - more fields for supported nodes
  - Inline (preliminary)
  - beautify tests/ a little
 WHAT STILL DOES NOT WORK
  - more complicated things of any particular kind:
    - sensors
    - extrusions which are collinear
    - ...

SPECIFICALLY: FOR SCRIPTS IN JAVA/JAVASCRIPT:
 Eventin floats work and eventout colors work, not much else.
 Of course, this will be very easy to expand later (next version I hope
 to have MFthings and everything except Nodes.

 These scripting implementations are to be considered very preliminary and 
 just proof-of-principles.

 Especially the javascript interface is VERY UGLY. And contains
 unfinished code.

V0.01 "some things work"
 WHAT IS SUPPOSED TO WORK
  - simple primitives (box, cone, cylinder, sphere, indexedfaceset*)
  - simple sensors (touchsensor, timesensor)
  - simple languages (perl)
  - simple nodes (scalarinterpolator,...)
  - simple structures (PROTO, USE/DEF)
 WHAT IS NOT YET IMPLEMENTED
  - complex geometries (elevationgrid, extrusion)
  - complex sensors (cylindersensor etc)
  - complex languages (java, javascript)
  - complex nodes (switch, lod...)
  - complex structures (anchor, externproto...)

(* indexedfaceset only partly implemented)

