From 53ebfcc5ad5554b67d2287f8b02c22ec8405af0f Mon Sep 17 00:00:00 2001 From: kcr Date: Wed, 9 Jun 2004 03:28:13 +0000 Subject: Initial creation of j3d-examples sources in CVS repository --- src/GeometryCompression/ObjectFileCompressor.html | 437 ++++++++++++++++++++++ src/GeometryCompression/ObjectFileCompressor.java | 247 ++++++++++++ src/GeometryCompression/README | 62 +++ src/GeometryCompression/build.xml | 66 ++++ src/GeometryCompression/cgview.java | 212 +++++++++++ src/GeometryCompression/obj2cg.java | 71 ++++ 6 files changed, 1095 insertions(+) create mode 100644 src/GeometryCompression/ObjectFileCompressor.html create mode 100644 src/GeometryCompression/ObjectFileCompressor.java create mode 100644 src/GeometryCompression/README create mode 100644 src/GeometryCompression/build.xml create mode 100644 src/GeometryCompression/cgview.java create mode 100644 src/GeometryCompression/obj2cg.java (limited to 'src/GeometryCompression') diff --git a/src/GeometryCompression/ObjectFileCompressor.html b/src/GeometryCompression/ObjectFileCompressor.html new file mode 100644 index 0000000..7540a8f --- /dev/null +++ b/src/GeometryCompression/ObjectFileCompressor.html @@ -0,0 +1,437 @@ + + + + + + +: Class ObjectFileCompressor + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + +
+ +

+Class ObjectFileCompressor

+
+java.lang.Object
+  |
+  +--com.sun.j3d.loaders.objectfile.ObjectFile
+        |
+        +--ObjectFileCompressor
+
+
+
+
public class ObjectFileCompressor
extends com.sun.j3d.loaders.objectfile.ObjectFile
+ +

+This extension of ObjectFile provides the methods setQuantization() and + compress() to compress Wavefront .obj files into the format described by + appendix B of the Java 3D specification. +

+


+ +

+ + + + + + + + + + + + + +
Fields inherited from class com.sun.j3d.loaders.objectfile.ObjectFile
RESIZE, +REVERSE, +STRIPIFY, +TRIANGULATE
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
ObjectFileCompressor() + +
+           
ObjectFileCompressor(int flags) + +
+           
ObjectFileCompressor(int flags, + float radians) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ javax.media.j3d.CompressedGeometrycompress(java.io.Reader reader) + +
+          Compress the specified .obj file into a CompressedGeometry node + component.
+ voidcompress(java.io.Reader reader, + com.sun.j3d.utils.compression.CompressedGeometryFile file) + +
+          Compress the specified .obj file and add it to the end of an open + compressed geometry file.
+ javax.media.j3d.CompressedGeometrycompress(java.lang.String objFileName) + +
+          Compress the specified .obj file into a CompressedGeometry node + component.
+ voidcompress(java.lang.String objFileName, + com.sun.j3d.utils.compression.CompressedGeometryFile file) + +
+          Compress the specified .obj file and add it to the end of an open + compressed geometry file.
+ javax.media.j3d.CompressedGeometrycompress(java.net.URL url) + +
+          Compress the specified .obj file into a CompressedGeometry node + component.
+ voidcompress(java.net.URL url, + com.sun.j3d.utils.compression.CompressedGeometryFile file) + +
+          Compress the specified .obj file and add it to the end of an open + compressed geometry file.
+ voidsetFlags(int flags) + +
+           
+ voidsetQuantization(int positionQuant, + int colorQuant, + int normalQuant) + +
+          Set the position, normal, and color quantization values for compression.
+ + + + + + + +
Methods inherited from class com.sun.j3d.loaders.objectfile.ObjectFile
getBasePath, +getBaseUrl, +getFlags, +load, +load, +load, +setBasePath, +setBaseUrl
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, +equals, +finalize, +getClass, +hashCode, +notify, +notifyAll, +toString, +wait, +wait, +wait
+  +

+ + + + + + + + + + + +
+Constructor Detail
+ +

+ObjectFileCompressor

+
+public ObjectFileCompressor()
+
+
+
+ +

+ObjectFileCompressor

+
+public ObjectFileCompressor(int flags)
+
+
+
+ +

+ObjectFileCompressor

+
+public ObjectFileCompressor(int flags,
+                            float radians)
+
+
+ + + + + + + + +
+Method Detail
+ +

+setFlags

+
+public void setFlags(int flags)
+
+
+
Overrides:
setFlags in class com.sun.j3d.loaders.objectfile.ObjectFile
+
+
+
+ +

+setQuantization

+
+public void setQuantization(int positionQuant,
+                            int colorQuant,
+                            int normalQuant)
+
+
Set the position, normal, and color quantization values for compression.
+
Parameters:
positionQuant - number of bits to quantize each position's X, Y, + and Z components, ranging from 1 to 16 with a default of 10
colorQuant - number of bits to quantize each color's R, G, B, and + alpha components, ranging from 2 to 16 with a default of 8
normalQuant - number of bits for quantizing each normal's U and V + components, ranging from 0 to 6 with a default of 3
+
+
+
+ +

+compress

+
+public javax.media.j3d.CompressedGeometry compress(java.lang.String objFileName)
+
+
Compress the specified .obj file into a CompressedGeometry node + component.
+
Parameters:
objFileName - String object representing the path to a .obj file
Returns:
a CompressedGeometry node component
+
+
+
+ +

+compress

+
+public void compress(java.lang.String objFileName,
+                     com.sun.j3d.utils.compression.CompressedGeometryFile file)
+              throws java.io.IOException
+
+
Compress the specified .obj file and add it to the end of an open + compressed geometry file.
+
Parameters:
objFileName - String object representing the path to a .obj file
file - a currently open CompressedGeometryFile object
Throws:
java.io.IOException - - if write fails
+
+
+
+ +

+compress

+
+public javax.media.j3d.CompressedGeometry compress(java.io.Reader reader)
+
+
Compress the specified .obj file into a CompressedGeometry node + component.
+
Parameters:
reader - an open .obj file
Returns:
a CompressedGeometry node component
+
+
+
+ +

+compress

+
+public void compress(java.io.Reader reader,
+                     com.sun.j3d.utils.compression.CompressedGeometryFile file)
+              throws java.io.IOException
+
+
Compress the specified .obj file and add it to the end of an open + compressed geometry file.
+
Parameters:
reader - an open .obj file
file - an open CompressedGeometryFile object
Throws:
java.io.IOException - - if write fails
+
+
+
+ +

+compress

+
+public javax.media.j3d.CompressedGeometry compress(java.net.URL url)
+
+
Compress the specified .obj file into a CompressedGeometry node + component.
+
Parameters:
url - Uniform Resource Locator for the .obj file
Returns:
a CompressedGeometry node component
+
+
+
+ +

+compress

+
+public void compress(java.net.URL url,
+                     com.sun.j3d.utils.compression.CompressedGeometryFile file)
+              throws java.io.IOException
+
+
Compress the specified .obj file and add it to the end of an open + compressed geometry file.
+
Parameters:
url - Uniform Resource Locator for the .obj file
file - a currently open CompressedGeometryFile object
Throws:
java.io.IOException - - if write fails
+
+
+ +
+ + + + + + + + + + + + + + + + + +
+ +
+ + +
+ + + diff --git a/src/GeometryCompression/ObjectFileCompressor.java b/src/GeometryCompression/ObjectFileCompressor.java new file mode 100644 index 0000000..d889ead --- /dev/null +++ b/src/GeometryCompression/ObjectFileCompressor.java @@ -0,0 +1,247 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2004 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$ + */ + +import com.sun.j3d.utils.compression.* ; +import com.sun.j3d.loaders.objectfile.ObjectFile ; +import com.sun.j3d.loaders.ParsingErrorException ; +import com.sun.j3d.loaders.IncorrectFormatException ; +import com.sun.j3d.loaders.Scene ; +import javax.media.j3d.* ; +import java.util.* ; +import java.net.* ; +import java.io.* ; + +/** + * This extension of ObjectFile provides the methods setQuantization() and + * compress() to compress Wavefront .obj files into the format described by + * appendix B of the Java 3D specification. + */ +public class ObjectFileCompressor extends ObjectFile { + private GeometryCompressor compressor = null ; + + public ObjectFileCompressor() { + super(STRIPIFY | TRIANGULATE) ; + compressor = new GeometryCompressor() ; + } + + public ObjectFileCompressor(int flags) { + super(flags | STRIPIFY | TRIANGULATE) ; + compressor = new GeometryCompressor() ; + } + + public ObjectFileCompressor(int flags, float radians) { + super(flags | STRIPIFY | TRIANGULATE, radians) ; + compressor = new GeometryCompressor() ; + } + + public void setFlags(int flags) { + super.setFlags(flags | STRIPIFY | TRIANGULATE) ; + } + + private int positionQuant = 10 ; + private int colorQuant = 8 ; + private int normalQuant = 3 ; + + /** + * Set the position, normal, and color quantization values for compression. + * @param positionQuant number of bits to quantize each position's X, Y, + * and Z components, ranging from 1 to 16 with a default of 10 + * @param colorQuant number of bits to quantize each color's R, G, B, and + * alpha components, ranging from 2 to 16 with a default of 8 + * @param normalQuant number of bits for quantizing each normal's U and V + * components, ranging from 0 to 6 with a default of 3 + */ + public void setQuantization(int positionQuant, + int colorQuant, + int normalQuant) { + + this.positionQuant = positionQuant ; + this.colorQuant = colorQuant ; + this.normalQuant = normalQuant ; + } + + /** + * Compress the specified .obj file into a CompressedGeometry node + * component. + * @param objFileName String object representing the path to a .obj file + * @return a CompressedGeometry node component + */ + public CompressedGeometry compress(String objFileName) { + return compressScene(getScene(objFileName)) ; + } + + /** + * Compress the specified .obj file and add it to the end of an open + * compressed geometry file. + * @param objFileName String object representing the path to a .obj file + * @param file a currently open CompressedGeometryFile object + * @exception IOException - if write fails + */ + public void compress(String objFileName, CompressedGeometryFile file) + throws IOException { + compressScene(getScene(objFileName), file) ; + } + + /** + * Compress the specified .obj file into a CompressedGeometry node + * component. + * @param reader an open .obj file + * @return a CompressedGeometry node component + */ + public CompressedGeometry compress(Reader reader) { + return compressScene(getScene(reader)) ; + } + + /** + * Compress the specified .obj file and add it to the end of an open + * compressed geometry file. + * @param reader an open .obj file + * @param file an open CompressedGeometryFile object + * @exception IOException - if write fails + */ + public void compress(Reader reader, CompressedGeometryFile file) + throws IOException { + compressScene(getScene(reader), file) ; + } + + /** + * Compress the specified .obj file into a CompressedGeometry node + * component. + * @param url Uniform Resource Locator for the .obj file + * @return a CompressedGeometry node component + */ + public CompressedGeometry compress(URL url) { + return compressScene(getScene(url)) ; + } + + /** + * Compress the specified .obj file and add it to the end of an open + * compressed geometry file. + * @param url Uniform Resource Locator for the .obj file + * @param file a currently open CompressedGeometryFile object + * @exception IOException - if write fails + */ + public void compress(URL url, CompressedGeometryFile file) + throws IOException { + compressScene(getScene(url), file) ; + } + + private CompressedGeometry compressScene(Scene scene) { + return compressor.compress(getStream(scene)) ; + } + + private void compressScene(Scene scene, CompressedGeometryFile file) + throws IOException { + compressor.compress(getStream(scene), file) ; + } + + private CompressionStream getStream(Scene scene) { + Hashtable objs = scene.getNamedObjects() ; + Shape3D shapes[] = new Shape3D[objs.size()] ; + + objs.values().toArray(shapes) ; + return new CompressionStream(positionQuant, colorQuant, normalQuant, + shapes) ; + } + + private Scene getScene(String objFileName) { + Scene scene = null ; + try { + scene = load(objFileName) ; + } + catch (FileNotFoundException e) { + System.err.println(e) ; + System.exit(1) ; + } + catch (ParsingErrorException e) { + System.err.println(e) ; + System.exit(1) ; + } + catch (IncorrectFormatException e) { + System.err.println(e) ; + System.exit(1) ; + } + return scene ; + } + + private Scene getScene(Reader reader) { + Scene scene = null ; + try { + scene = load(reader) ; + } + catch (FileNotFoundException e) { + System.err.println(e) ; + System.exit(1) ; + } + catch (ParsingErrorException e) { + System.err.println(e) ; + System.exit(1) ; + } + catch (IncorrectFormatException e) { + System.err.println(e) ; + System.exit(1) ; + } + return scene ; + } + + private Scene getScene(URL url) { + Scene scene = null ; + try { + scene = load(url) ; + } + catch (FileNotFoundException e) { + System.err.println(e) ; + System.exit(1) ; + } + catch (ParsingErrorException e) { + System.err.println(e) ; + System.exit(1) ; + } + catch (IncorrectFormatException e) { + System.err.println(e) ; + System.exit(1) ; + } + return scene ; + } +} diff --git a/src/GeometryCompression/README b/src/GeometryCompression/README new file mode 100644 index 0000000..23611dc --- /dev/null +++ b/src/GeometryCompression/README @@ -0,0 +1,62 @@ +/* + * @(#)README 1.4 01/06/20 16:18:13 + * + * Copyright (c) 1996-2001 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: + * + * - Redistributions 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 AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES + * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THE 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 SOFTWARE, + * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + * You acknowledge that Software is not designed,licensed or intended + * for use in the design, construction, operation or maintenance of + * any nuclear facility. + */ + +This directory contains example code for using compressed geometry in +Java 3D through the com.sun.j3d.utils.compression package. + +Applications: + + obj2cg -- takes the names of .obj files to compress followed by the name + of a .cg compressed geometry resource file. If the .cg file + doesn't exist, then an attempt is made to create it; otherwise, + new compressed geometry objects are appended to the end. + + The .obj files are compressed and stored into the .cg file in + the order in which they appear in the command line, and can be + accessed through indices [0 .. fileCount-1] + + cgview -- takes the name of a .cg file and the index of the object to + display, which can range from [0 .. objectCount-1]. The object + may rotated, scaled, and translated in response to mouse drags. + + +Utility classes: + + ObjectFileCompressor.java -- + Extends ObjectFile with compression methods. diff --git a/src/GeometryCompression/build.xml b/src/GeometryCompression/build.xml new file mode 100644 index 0000000..cbf53a8 --- /dev/null +++ b/src/GeometryCompression/build.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/GeometryCompression/cgview.java b/src/GeometryCompression/cgview.java new file mode 100644 index 0000000..7ec319f --- /dev/null +++ b/src/GeometryCompression/cgview.java @@ -0,0 +1,212 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2004 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$ + */ + +import com.sun.j3d.utils.compression.* ; +import com.sun.j3d.utils.behaviors.vp.* ; +import com.sun.j3d.utils.applet.MainFrame ; +import com.sun.j3d.utils.universe.* ; +import javax.media.j3d.* ; +import javax.vecmath.* ; +import java.applet.Applet ; +import java.awt.BorderLayout ; +import java.awt.event.* ; +import java.io.* ; + +public class cgview extends Applet { + + private SimpleUniverse u = null; + + public BranchGroup createSceneGraph(CompressedGeometry cg) { + // Create the root of the branch graph + BranchGroup objRoot = new BranchGroup() ; + + // Create a Transformgroup to scale all objects so they + // appear in the scene. + TransformGroup objScale = new TransformGroup() ; + Transform3D t3d = new Transform3D() ; + t3d.setScale(0.7) ; + objScale.setTransform(t3d) ; + objRoot.addChild(objScale) ; + + // Create the transform group node and initialize it to the + // identity. Enable the TRANSFORM_WRITE capability so that + // our behavior code can modify it at runtime. Add it to the + // root of the subgraph. + TransformGroup objTrans = new TransformGroup() ; + objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE) ; + objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ) ; + objScale.addChild(objTrans) ; + + // Add compressed geometry to the scene graph. + CompressedGeometryHeader hdr = new CompressedGeometryHeader() ; + cg.getCompressedGeometryHeader(hdr) ; + + // There isn't really enough information in the compressed geometry + // header to unamiguously determine the proper rendering attributes. + // The bufferDataPresent field specifies whether or not normals are + // bundled with vertices, but the compressed buffer can still contain + // normals that should be lit. Assume that any surface geometry + // should be lit and that lines and points should not unless the + // header contains the NORMAL_IN_BUFFER bit. + Material m = new Material() ; + if ((hdr.bufferType == hdr.TRIANGLE_BUFFER) || + ((hdr.bufferDataPresent & hdr.NORMAL_IN_BUFFER) == 1)) + m.setLightingEnable(true) ; + else + m.setLightingEnable(false) ; + + Appearance a = new Appearance() ; + a.setMaterial(m) ; + + objTrans.addChild(new Shape3D(cg, a)) ; + + // Create mouse behavior scheduling bounds. + BoundingSphere bounds = + new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0) ; + + // Set up the background + Color3f bgColor = new Color3f(0.05f, 0.05f, 0.5f); + Background bgNode = new Background(bgColor) ; + bgNode.setApplicationBounds(bounds) ; + objRoot.addChild(bgNode) ; + + // Set up the ambient light + Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f) ; + AmbientLight ambientLightNode = new AmbientLight(ambientColor) ; + ambientLightNode.setInfluencingBounds(bounds) ; + objRoot.addChild(ambientLightNode) ; + + // Set up the directional lights + Color3f light1Color = new Color3f(1.0f, 1.0f, 0.9f) ; + Vector3f light1Direction = new Vector3f(1.0f, 1.0f, 1.0f) ; + Color3f light2Color = new Color3f(1.0f, 1.0f, 0.9f) ; + Vector3f light2Direction = new Vector3f(-1.0f, -1.0f, -0.9f) ; + + DirectionalLight light1 + = new DirectionalLight(light1Color, light1Direction) ; + light1.setInfluencingBounds(bounds) ; + objRoot.addChild(light1) ; + + DirectionalLight light2 + = new DirectionalLight(light2Color, light2Direction) ; + light2.setInfluencingBounds(bounds) ; + objRoot.addChild(light2) ; + + return objRoot ; + } + + private void usage() { + System.out.println("Usage: cgview <.cg file> ") ; + System.exit(0) ; + } + + public cgview(String args[]) { + if (args.length < 1) + usage() ; + + int index ; + if (args.length < 2) + index = 0 ; + else + index = Integer.parseInt(args[1]) ; + + String filename = args[0] ; + if (filename == null) + usage() ; + + // Read the compressed geometry. + CompressedGeometry cg = null ; + try { + CompressedGeometryFile cgf ; + cgf = new CompressedGeometryFile(filename, false) ; + + if (cgf.getObjectCount() == 0) { + System.out.println("no objects were found in " + filename) ; + System.exit(0) ; + } + + cg = cgf.read(index) ; + cgf.close() ; + + } catch (IOException e) { + System.out.println(e) ; + System.exit(0) ; + } + + setLayout(new BorderLayout()) ; + Canvas3D c = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); + add("Center", c) ; + + // Create a simple scene and attach it to the virtual universe + BranchGroup scene = createSceneGraph(cg) ; + u = new SimpleUniverse(c) ; + + // add mouse behaviors to the ViewingPlatform + ViewingPlatform viewingPlatform = u.getViewingPlatform(); + + // This will move the ViewPlatform back a bit so the + // objects in the scene can be viewed. + viewingPlatform.setNominalViewingTransform(); + + OrbitBehavior orbit = new OrbitBehavior(c, OrbitBehavior.REVERSE_ALL); + BoundingSphere bounds = + new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); + orbit.setSchedulingBounds(bounds); + viewingPlatform.setViewPlatformBehavior(orbit); + + u.addBranchGraph(scene) ; + } + + public void destroy() { + u.cleanup(); + } + + // + // The following allows cgview to be run as an application + // as well as an applet. + // + public static void main(String[] args) { + new MainFrame(new cgview(args), 700, 700) ; + } +} diff --git a/src/GeometryCompression/obj2cg.java b/src/GeometryCompression/obj2cg.java new file mode 100644 index 0000000..5aac88c --- /dev/null +++ b/src/GeometryCompression/obj2cg.java @@ -0,0 +1,71 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2004 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$ + */ + +import com.sun.j3d.utils.compression.* ; +import javax.media.j3d.* ; +import java.io.* ; + +class obj2cg { + + public static void main(String args[]) throws IOException { + if (args.length < 2) { + System.out.println + ("obj2cg wants the names of .obj files to compress,\n" + + "followed by the name of a .cg file to create or to\n" + + "which to append.") ; + System.exit(0) ; + } + + CompressedGeometryFile file ; + file = new CompressedGeometryFile(args[args.length-1], true) ; + + ObjectFileCompressor compressor ; + compressor = new ObjectFileCompressor() ; + + for (int i = 0 ; i < args.length-1 ; i++) + compressor.compress(args[i], file) ; + + file.close() ; + } +} -- cgit v1.2.3