aboutsummaryrefslogtreecommitdiffstats
path: root/src/classes/org/jdesktop/j3d/examples/lightwave
diff options
context:
space:
mode:
authorkcr <kcr@28c7f869-5b4e-e670-f602-82bfaf57f300>2006-02-01 01:33:24 +0000
committerkcr <kcr@28c7f869-5b4e-e670-f602-82bfaf57f300>2006-02-01 01:33:24 +0000
commit39283191507259cb4dccba3441cdf16025179829 (patch)
tree29ad229325ab151a056d06fbe4c6f1fcd7b292d7 /src/classes/org/jdesktop/j3d/examples/lightwave
parent3d596b24b72677fbf264a22f3c0ff44aa9bb2baf (diff)
Issue 206 : Example program cleanup
Item 4) Reorganized directory structure to make the examples a single project rather than a collection of independent apps. . All example programs moved under src/classes, and all are now in a subpackage of org.jdesktop.j3d.examples. . All resource files (geometry, images, audio) moved under src/resources . ant script now exists only at top level . Created netbeans project file for NetBeans IDE
Diffstat (limited to 'src/classes/org/jdesktop/j3d/examples/lightwave')
-rw-r--r--src/classes/org/jdesktop/j3d/examples/lightwave/README.txt321
-rw-r--r--src/classes/org/jdesktop/j3d/examples/lightwave/Viewer.java209
2 files changed, 530 insertions, 0 deletions
diff --git a/src/classes/org/jdesktop/j3d/examples/lightwave/README.txt b/src/classes/org/jdesktop/j3d/examples/lightwave/README.txt
new file mode 100644
index 0000000..c37f4d9
--- /dev/null
+++ b/src/classes/org/jdesktop/j3d/examples/lightwave/README.txt
@@ -0,0 +1,321 @@
+/*
+ * $RCSfile$
+ *
+ * Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistribution of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistribution in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of Sun Microsystems, Inc. or the names of
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * This software is provided "AS IS," without a warranty of any
+ * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
+ * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
+ * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
+ * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
+ * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
+ * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
+ * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
+ * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
+ * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
+ * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ *
+ * You acknowledge that this software is not designed, licensed or
+ * intended for use in the design, construction, operation or
+ * maintenance of any nuclear facility.
+ *
+ * $Revision$
+ * $Date$
+ * $State$
+ */
+
+ Release Notes for the Lightwave 3D Java3D Loader
+ ------------------------------------------------
+ Updated May 13, 1998
+
+
+
+These release notes are intended to document the known working and
+non-working features of the loader. This is important because the loader
+implements an important subset of Lightwave functionality, but it definitely
+skips many major features of Lightwave files. Please read these notes
+to make sure that the features you need are actually implemented. Or
+if you see differences between Lightwave display of your file and
+the Java3D version of that file, take a look at these notes to see
+what might not be working properly.
+
+
+Testing the Loader
+------------------
+The application in this directory (Viewer) is intended to be a very
+basic test application for loading/viewing Lightwave 3D models. To
+use the program, type:
+ java Viewer <filename>
+where <filename> is the name of a valid Lightwave 3D scene file that is
+reachable from the current directory. There is a very basic test file
+included in this directory called ballcone.lws. To load/view that file,
+type:
+ java Viewer ballcone.lws
+Note that Lightwave scene files (*.lws) embed the pathnames to object
+files (*.lwo) within them, and that object files have pathnames
+to image files (for textures) embedded in them. Whatever those
+pathnames are in those files must be valid for the directory in which
+you are running the application that loads the scene file. For example,
+if I was loading in a scene file that referred to an object file
+called "data/object.lwo", then the file "object.lwo" should be located in
+a subdirectory of this current directory called "data".
+
+
+Summary of Loader
+-----------------
+The Lw3d loader was intended to implement a major subset of the features in
+Lightwave 3D that would be used for realtime 3D animations. That is, any
+features (such as Bones and other high-end rendering
+options) which would require significant rendering time were simply
+not doable. These more advanced features are intended to be rendered
+off-line, saving each frame separately and later compositing them
+together into an animation. But Java3D is a realtime 3D rendering
+system, so these type of animations just do not map into a Java3D viewer
+very well.
+
+Another category of non-implemented items are those that we simply have not
+yet gotten to. There are a few known features of Lightwave files that
+would work well through Java3D but just haven't been implemented in the
+loader yet.
+
+Although there are a lot of features that are not yet implemented,
+the basics of Lightwave 3D functionality (scene creation, animating
+objects/lights/cameras, different surface properties) all work pretty
+much as expected. So try it out and let us know non-documented items
+that didn't work properly.
+
+
+Details of Non-Implemented Features
+-----------------------------------
+This list is probably not comprehensive, but hopefully points out most of
+the features or areas where the implementation is incomplete (or not
+there at all).
+
+
+Limitations of Scene Files (*.lws)
+----------------------------------
+1) Bones/Skeleton
+Bones functionality is not implemented at all. Unfortunately, this
+great feature of Lightwave 3D is not currently implementable in the
+loader because the processing time that it would take to compute
+frames based on Bones data would be far more than a real-time rendering
+system can afford.
+
+The loader may, at some future point, provide a mechanism to read
+in frames of geometry that were saved from Lightwave Bones descriptions.
+That is, there are plug-ins available for Lightwave 3D that allow you
+to save out files with Bones information as a series of files with
+pre-calculated geometry for each frame; eventually we would like the
+Lightwave 3D loader to support those files.
+
+Workaround: None; the best and only workaround is to find a different
+method of animating your objects.
+
+
+2) Spline paths
+Spline paths will be interpreted as linear piecewise paths instead,
+traveling between each control point specified for the spline.
+
+Workaround: Specify linear paths. If your path looks too hard-jointed
+through the loader, specify more keyframes for the path to smooth it out.
+
+
+3) Object Scaling
+Scaling objects in the scene (versus the object files) is currently
+ignored.
+
+Workaround: scale the objects in their individual object files.
+
+
+4) Shadows
+Shadows options are ignored in the loader.
+
+Workaround: None.
+
+
+5) Envelopes
+Most envelopes are ignored. There are a couple of exceptions to this,
+such as light intensity envelopes, but even those features have not been
+completely implemented and tested.
+
+Workaround: None.
+
+
+6) Camera effects
+All advanced-rendering camera effects are ignored in the loader. This
+includes the following items in Lightwave 3D files:
+ - Lens Flare
+ - F-stop
+ - Focal Distance
+ - Blur Length
+ - Dissolves
+ - Glow
+ - Zoom
+ - Intensity Falloff
+ - Antialiasing
+
+Workaround: None.
+
+
+7) Inverse Kinematics
+IK options such as Goal Objects and Anchors are ignored.
+
+Workaround: Animate objects directly instead of indirectly via IK.
+
+
+8) Morphs
+All morph options are ignored.
+
+Workaround: None.
+
+
+9) Display properties
+Lightwave allows you to specify surface properties for different rendering
+modes (e.g., wireframe color). All of these parameters are ignored and
+the full properties of any item are used at all times.
+
+Workaround: None.
+
+
+10) Various Surface Properties
+Various minor surface properties are currently ignored, including:
+ - Polygon size
+ - Dissolves
+ - Clip map
+ - Unaffected by fog
+ - Edge parameters
+
+Workaround: None.
+
+
+11) Lights
+The following items are currently ignored for Light objects:
+ - Target objects
+ - Flare parameters
+ - Shadow options
+
+Workaround: None for flares or shadows. For targeting problems, animate the
+light directly (versus indirectly through using Target).
+
+
+12) Camera Targeting
+The Target option for Camera objects is currently ignored by the loader.
+
+Workaround: Animate the camera directly (versus indirectly through using
+Target).
+
+
+13) Effects
+Most effects (from the Effects dialog box in the layout program) are
+ignored, save for fog (which should accept all parameters) and
+backdrop colors (solid backdrops only - gradient backdrops are
+ignored).
+
+Workaround: None.
+
+
+14) Render Options
+Most options from the Render dialog box are ignored - most of these pertain
+to saving the animation in any case (something that doesn't happen through
+the Loader).
+
+Workaround: None.
+
+
+
+Limitations of Object Files (*.lwo)
+-----------------------------------
+1) MetaNURBS
+Geometry stored in MetaNURBS format will be ignored by the loader.
+
+Workaround: pre-tessellate your MetaNURBS surfaces and save your
+geometry (object) files in that format.
+
+
+2) Layered Object Files
+There is currently no support for the "Layered Object File Format"
+of Lightwave 3D.
+
+Workaround: None.
+
+
+3) Reflectivity
+There is no way to reproduce the reflective properties of surfaces
+through Java3D, so any reflectivity settings in Lightwave object files
+will be ignored.
+
+Workaround: None.
+
+
+4) Refraction
+Refractive properties of surfaces are ignored.
+
+Workaround: None.
+
+
+5) Edge Transparency
+Edge transparency properties are ignored.
+
+Workaround. None.
+
+
+6) Texture types
+Texture mapping is currently somewhat limited in the loader. The following
+types of texture mapping effects should work:
+ - Diffuse (the texture modifies the Diffuse aspects of the surface)
+ - Color (the texture modifies the Color properties of the surface).
+Textures that attempt to modify other parameters of the surface will
+be ignored.
+
+Also, the following texture types should work:
+ - Planar Image Map
+ - Spherical Image Map
+ - Cylindrical Image Map
+Other kinds of mappings will not work (including Marble, Grid, Dots, etc.)
+
+Some Texture parameters will not work. The following should work correctly:
+ - size
+ - center
+Advanced texture parameters such as falloff and velocity will be ignored.
+
+Summary: There are so many texture mapping parameters in Lightwave 3D that
+it's difficult to produce a list of all of the items that won't work
+properly. In a nutshell, basic decal-type (color modifying) or brightness
+(diffuse modifying) textures that are mapped as planes, spheres, or
+cylinders should work correctly. Anything else will probably not work.
+
+Workaround: Use the basics.
+
+
+7) Plug-ins
+There is currently no support for any plug-in capabilities. For example,
+if there are plug-in shaders specified for your file, those shaders will be
+ignored.
+
+Workaround: None.
+
+
+8) Image Sequences
+There is no support for image sequences - textures must be static files.
+
+Workaround: None.
+
+
diff --git a/src/classes/org/jdesktop/j3d/examples/lightwave/Viewer.java b/src/classes/org/jdesktop/j3d/examples/lightwave/Viewer.java
new file mode 100644
index 0000000..8959d4d
--- /dev/null
+++ b/src/classes/org/jdesktop/j3d/examples/lightwave/Viewer.java
@@ -0,0 +1,209 @@
+/*
+ * $RCSfile$
+ *
+ * Copyright (c) 2006 Sun Microsystems, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistribution of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * - Redistribution in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of Sun Microsystems, Inc. or the names of
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * This software is provided "AS IS," without a warranty of any
+ * kind. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND
+ * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY
+ * EXCLUDED. SUN MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL
+ * NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF
+ * USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
+ * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR
+ * ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL,
+ * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND
+ * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR
+ * INABILITY TO USE THIS SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGES.
+ *
+ * You acknowledge that this software is not designed, licensed or
+ * intended for use in the design, construction, operation or
+ * maintenance of any nuclear facility.
+ *
+ * $Revision$
+ * $Date$
+ * $State$
+ */
+
+package org.jdesktop.j3d.examples.lightwave;
+
+import java.applet.Applet;
+import java.awt.*;
+
+import javax.media.j3d.BranchGroup;
+import javax.media.j3d.Canvas3D;
+import javax.media.j3d.Transform3D;
+import javax.media.j3d.TransformGroup;
+import javax.media.j3d.View;
+import javax.vecmath.Matrix4d;
+
+import com.sun.j3d.loaders.lw3d.Lw3dLoader;
+import com.sun.j3d.loaders.Loader;
+import com.sun.j3d.loaders.Scene;
+import com.sun.j3d.utils.applet.MainFrame;
+import com.sun.j3d.utils.universe.SimpleUniverse;
+
+
+/**
+ * This class loads in a Lightwave3D file and displays it in an applet
+ * window. The application is fairly basic; a more complete version
+ * of a Lightwave 3D loader might incorporate features such as
+ * settable clip plane distances and animated views (these are both
+ * possible with the current Lightwave 3D loader, they just need to
+ * be implemented in the application).
+ */
+public class Viewer extends Applet {
+
+ private java.net.URL filename;
+ private SimpleUniverse u;
+
+ public Viewer(java.net.URL url) {
+ filename = url;
+ }
+
+ public Viewer() {}
+
+ public void init() {
+ if (filename == null) {
+ // the path to the file for an applet
+ try {
+ java.net.URL path = getCodeBase();
+ filename = new java.net.URL(path.toString() +
+ "./ballcone.lws");
+ }
+ catch (java.net.MalformedURLException ex) {
+ System.err.println(ex.getMessage());
+ ex.printStackTrace();
+ System.exit(1);
+ }
+ }
+
+ // Construct the Lw3d loader and load the file
+ Loader lw3dLoader = new Lw3dLoader(Loader.LOAD_ALL);
+ Scene loaderScene = null;
+ try {
+ loaderScene = lw3dLoader.load(filename);
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ System.exit(1);
+ }
+
+ // Construct the applet canvas
+ setLayout(new BorderLayout());
+ GraphicsConfiguration config =
+ SimpleUniverse.getPreferredConfiguration();
+
+ Canvas3D c = new Canvas3D(config);
+ add("Center", c);
+
+ // Create a basic universe setup and the root of our scene
+ u = new SimpleUniverse(c);
+ BranchGroup sceneRoot = new BranchGroup();
+
+ // Change the back clip distance; the default is small for
+ // some lw3d worlds
+ View theView = u.getViewer().getView();
+ theView.setBackClipDistance(50000f);
+
+ // Now add the scene graph defined in the lw3d file
+ if (loaderScene.getSceneGroup() != null) {
+ // Instead of using the default view location (which may be
+ // completely bogus for the particular file you're loading),
+ // let's use the initial view from the file. We can get
+ // this by getting the view groups from the scene (there's
+ // only one for Lightwave 3D), then using the inverse of the
+ // transform on that view as the transform for the entire scene.
+
+ // First, get the view groups (shouldn't be null unless there
+ // was something wrong in the load
+ TransformGroup viewGroups[] = loaderScene.getViewGroups();
+
+ // Get the Transform3D from the view and invert it
+ Transform3D t = new Transform3D();
+ viewGroups[0].getTransform(t);
+ Matrix4d m = new Matrix4d();
+ t.get(m);
+ m.invert();
+ t.set(m);
+
+ // Now we've got the transform we want. Create an
+ // appropriate TransformGroup and parent the scene to it.
+ // Then insert the new group into the main BranchGroup.
+ TransformGroup sceneTransform = new TransformGroup(t);
+ sceneTransform.addChild(loaderScene.getSceneGroup());
+ sceneRoot.addChild(sceneTransform);
+ }
+
+ // Make the scene graph live by inserting the root into the universe
+ u.addBranchGraph(sceneRoot);
+ }
+
+
+ public void destroy() {
+ u.cleanup();
+ }
+
+ /**
+ * The main method of the application takes one argument in the
+ * args array; the filname that you want to load. Note that the
+ * file must be reachable from the directory in which you're running
+ * this application.
+ */
+ public static void main(String args[]) {
+ java.net.URL url = null;
+ java.net.URL pathUrl = null;
+ if (args.length > 0) {
+ try {
+ if ((args[0].indexOf("file:") == 0) ||
+ (args[0].indexOf("http") == 0)) {
+ url = new java.net.URL(args[0]);
+ }
+ else if (args[0].charAt(0) != '/') {
+ url = new java.net.URL("file:./" + args[0]);
+ }
+ else {
+ url = new java.net.URL("file:" + args[0]);
+ }
+ }
+ catch (java.net.MalformedURLException ex) {
+ System.err.println(ex.getMessage());
+ ex.printStackTrace();
+ System.exit(1);
+ }
+ }
+ else {
+ // the path to the image for an application
+ try {
+ url = new java.net.URL("file:./ballcone.lws");
+ }
+ catch (java.net.MalformedURLException ex) {
+ System.err.println(ex.getMessage());
+ ex.printStackTrace();
+ System.exit(1);
+ }
+ }
+ new MainFrame(new Viewer(url), 500, 500);
+ }
+}
+
+
+
+