Description: ============ This distribution contains a package of Java classes to represent and manipulate NURBS. Full source and javadoc documentation is available: http://www.ocnus.com/NURBS/ Along with this package are VRML prototypes for three nodes: NurbsCurve NurbsSurface NurbsRevolve which are implemented in Java using the classes in this package. Also included are numerous examples. The files in this distribution are listed at the end of this README. All code has been developed and tested using Liquid Reality 1.0b11 running under Irix on an SGI. Please read the following notice: ================================= Copyright (c) 1997 ORC Incorporated. All Rights Reserved. Permission to use, copy, modify, and distribute this software and its documentation for NON-COMMERCIAL purposes and without fee is hereby granted provided that this copyright notice appears in all copies. Please contact for further information regarding copyright and licensing. This code is provided without warranty, either expressed or implied. Portions of this code appear in the book "Late Night VRML 2.0 with Java", Ziff-Davis Press, 1997 author Timothy F. Rohaly version 1.0, 01/15/97 Known misbehaviors: =================== 1) Tessellation fails for curves which do not interpolate their endpoints, i.e. when the knot multiplicity at the endpoints is not equal to the order of the curve. This is due to the algorithm used to add control points. Workaround is to make sure you define interpolating knot sequences. This will be fixed the next version. 2) The segments parameter passed in from the prototype behaves in a non-intuitive manner. Currently, segments defines the number of new control points to generate. These new points are merged with the original control points, and only the non-duplicate ones are actually *added*. So for example, if you define a nurbs circle with 9 control points, then set segments to 11, you will find that you only add 5 new ones (out of the 11, three at the beginning and three at the end are duplicates, so only 5 new ones are added). This is a much larger effect for small numbers of segments than for a large number. This can and will be changed so that segments corresponds to the actual number of segments in the tesselated curve. 3) For surfaces, especially surfaces generated by extrude() or revolve(), duplicate control points (used to decrease the degree of continuity) can produce polygons with degenerate vertices. Some renderers try to calculate a normal anyway and so may exhibit shading anomolies. This will be fixed in the next version. 4) In the revolve() method of nurbs, the thetamin and thetamax parameters currently are ignored. All revolution is done between 0 and 2*PI. This affects the NurbsRevolve prototype so that the minAngle and maxAngle fields have no effect. In the near future: =================== Let me know if you have any requests for new features. Here is some stuff under construction that was not completed in time for this distribution but will be in the next version: 1) evaluate(). Given a knot parameter return the nth derivative of the curve, where n = 0...degree-1. 2) split(). Split the curve or surface into two parts at parameter t. 3) skin(). Generate a ruled surface between two nurbs. 4) NurbsExtrusion. Prototype and examples using the extrude() method. 5) Some of the fields in the three prototypes will be changed to eventIns or eventOuts so that ROUTEs can be attached. 6) The profile curve in the NurbsRevolve prototype will be changed so that NurbsRevolve can take an instance of NurbsCurve. 7) Additional demo code and example wrls which use the prototypes. Files in this distribution: =========================== NURBS/AllNames.html NURBS/BezierSurface.wrl NURBS/Circle.wrl NURBS/Cone.wrl NURBS/Dome.wrl NURBS/Helix.wrl NURBS/NurbsCurve.java NURBS/NurbsCurve.wrl NURBS/NurbsRevolve.java NURBS/NurbsRevolve.wrl NURBS/NurbsSurface.java NURBS/NurbsSurface.wrl NURBS/Package-nurbs.html NURBS/README NURBS/Refine.wrl NURBS/Sphere.wrl NURBS/Square.wrl NURBS/Torus.wrl NURBS/Triangle.wrl NURBS/WineGlass.wrl NURBS/images/blue-ball-small.gif NURBS/images/blue-ball.gif NURBS/images/class-index.gif NURBS/images/constructor-index.gif NURBS/images/constructors.gif NURBS/images/cyan-ball-small.gif NURBS/images/cyan-ball.gif NURBS/images/error-index.gif NURBS/images/exception-index.gif NURBS/images/green-ball-small.gif NURBS/images/green-ball.gif NURBS/images/interface-index.gif NURBS/images/magenta-ball-small.gif NURBS/images/magenta-ball.gif NURBS/images/method-index.gif NURBS/images/methods.gif NURBS/images/package-index.gif NURBS/images/red-ball-small.gif NURBS/images/red-ball.gif NURBS/images/variable-index.gif NURBS/images/variables.gif NURBS/images/yellow-ball-small.gif NURBS/images/yellow-ball.gif NURBS/nurbs/ControlNet.java NURBS/nurbs/Knot.java NURBS/nurbs/Nurbs.java NURBS/nurbs/Point4.java NURBS/nurbs.ControlNet.html NURBS/nurbs.Knot.html NURBS/nurbs.Nurbs.html NURBS/nurbs.Point4.html NURBS/packages.html NURBS/quilt.gif NURBS/tree.html