summaryrefslogtreecommitdiffstats
path: root/src/GeometryCompression
diff options
context:
space:
mode:
Diffstat (limited to 'src/GeometryCompression')
-rw-r--r--src/GeometryCompression/ObjectFileCompressor.html437
-rw-r--r--src/GeometryCompression/ObjectFileCompressor.java247
-rw-r--r--src/GeometryCompression/README62
-rw-r--r--src/GeometryCompression/build.xml66
-rw-r--r--src/GeometryCompression/cgview.java212
-rw-r--r--src/GeometryCompression/obj2cg.java71
6 files changed, 1095 insertions, 0 deletions
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 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN""http://www.w3.org/TR/REC-html40/frameset.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Sat May 22 22:02:52 PDT 1999 -->
+<TITLE>
+: Class ObjectFileCompressor
+</TITLE>
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+</HEAD>
+<BODY BGCOLOR="white">
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_top"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ObjectFileCompressor.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sun.j3d.loaders.objectfile.ObjectFile">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: &nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+Class ObjectFileCompressor</H2>
+<PRE>
+java.lang.Object
+ |
+ +--com.sun.j3d.loaders.objectfile.ObjectFile
+ |
+ +--<B>ObjectFileCompressor</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ObjectFileCompressor</B><DT>extends com.sun.j3d.loaders.objectfile.ObjectFile</DL>
+
+<P>
+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.
+<P>
+<HR>
+
+<P>
+<!-- ======== INNER CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="fields_inherited_from_class_com.sun.j3d.loaders.objectfile.ObjectFile"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Fields inherited from class com.sun.j3d.loaders.objectfile.ObjectFile</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>RESIZE,
+REVERSE,
+STRIPIFY,
+TRIANGULATE</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#ObjectFileCompressor()">ObjectFileCompressor</A></B>()</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#ObjectFileCompressor(int)">ObjectFileCompressor</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#ObjectFileCompressor(int, float)">ObjectFileCompressor</A></B>(int&nbsp;flags,
+ float&nbsp;radians)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+</TABLE>
+&nbsp;
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;javax.media.j3d.CompressedGeometry</CODE></FONT></TD>
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#compress(java.io.Reader)">compress</A></B>(java.io.Reader&nbsp;reader)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compress the specified .obj file into a CompressedGeometry node
+ component.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#compress(java.io.Reader, com.sun.j3d.utils.compression.CompressedGeometryFile)">compress</A></B>(java.io.Reader&nbsp;reader,
+ com.sun.j3d.utils.compression.CompressedGeometryFile&nbsp;file)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compress the specified .obj file and add it to the end of an open
+ compressed geometry file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;javax.media.j3d.CompressedGeometry</CODE></FONT></TD>
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#compress(java.lang.String)">compress</A></B>(java.lang.String&nbsp;objFileName)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compress the specified .obj file into a CompressedGeometry node
+ component.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#compress(java.lang.String, com.sun.j3d.utils.compression.CompressedGeometryFile)">compress</A></B>(java.lang.String&nbsp;objFileName,
+ com.sun.j3d.utils.compression.CompressedGeometryFile&nbsp;file)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compress the specified .obj file and add it to the end of an open
+ compressed geometry file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;javax.media.j3d.CompressedGeometry</CODE></FONT></TD>
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#compress(java.net.URL)">compress</A></B>(java.net.URL&nbsp;url)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compress the specified .obj file into a CompressedGeometry node
+ component.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#compress(java.net.URL, com.sun.j3d.utils.compression.CompressedGeometryFile)">compress</A></B>(java.net.URL&nbsp;url,
+ com.sun.j3d.utils.compression.CompressedGeometryFile&nbsp;file)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Compress the specified .obj file and add it to the end of an open
+ compressed geometry file.</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#setFlags(int)">setFlags</A></B>(int&nbsp;flags)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>&nbsp;void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="ObjectFileCompressor.html#setQuantization(int, int, int)">setQuantization</A></B>(int&nbsp;positionQuant,
+ int&nbsp;colorQuant,
+ int&nbsp;normalQuant)</CODE>
+
+<BR>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Set the position, normal, and color quantization values for compression.</TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_com.sun.j3d.loaders.objectfile.ObjectFile"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class com.sun.j3d.loaders.objectfile.ObjectFile</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>getBasePath,
+getBaseUrl,
+getFlags,
+load,
+load,
+load,
+setBasePath,
+setBaseUrl</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>clone,
+equals,
+finalize,
+getClass,
+hashCode,
+notify,
+notifyAll,
+toString,
+wait,
+wait,
+wait</CODE></TD>
+</TR>
+</TABLE>
+&nbsp;
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ObjectFileCompressor()"><!-- --></A><H3>
+ObjectFileCompressor</H3>
+<PRE>
+public <B>ObjectFileCompressor</B>()</PRE>
+<DL>
+</DL>
+<HR>
+
+<A NAME="ObjectFileCompressor(int)"><!-- --></A><H3>
+ObjectFileCompressor</H3>
+<PRE>
+public <B>ObjectFileCompressor</B>(int&nbsp;flags)</PRE>
+<DL>
+</DL>
+<HR>
+
+<A NAME="ObjectFileCompressor(int, float)"><!-- --></A><H3>
+ObjectFileCompressor</H3>
+<PRE>
+public <B>ObjectFileCompressor</B>(int&nbsp;flags,
+ float&nbsp;radians)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" WIDTH="100%">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="setFlags(int)"><!-- --></A><H3>
+setFlags</H3>
+<PRE>
+public void <B>setFlags</B>(int&nbsp;flags)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Overrides:</B><DD>setFlags in class com.sun.j3d.loaders.objectfile.ObjectFile</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setQuantization(int, int, int)"><!-- --></A><H3>
+setQuantization</H3>
+<PRE>
+public void <B>setQuantization</B>(int&nbsp;positionQuant,
+ int&nbsp;colorQuant,
+ int&nbsp;normalQuant)</PRE>
+<DL>
+<DD>Set the position, normal, and color quantization values for compression.<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>positionQuant</CODE> - number of bits to quantize each position's X, Y,
+ and Z components, ranging from 1 to 16 with a default of 10<DD><CODE>colorQuant</CODE> - number of bits to quantize each color's R, G, B, and
+ alpha components, ranging from 2 to 16 with a default of 8<DD><CODE>normalQuant</CODE> - number of bits for quantizing each normal's U and V
+ components, ranging from 0 to 6 with a default of 3</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compress(java.lang.String)"><!-- --></A><H3>
+compress</H3>
+<PRE>
+public javax.media.j3d.CompressedGeometry <B>compress</B>(java.lang.String&nbsp;objFileName)</PRE>
+<DL>
+<DD>Compress the specified .obj file into a CompressedGeometry node
+ component.<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>objFileName</CODE> - String object representing the path to a .obj file<DT><B>Returns:</B><DD>a CompressedGeometry node component</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compress(java.lang.String, com.sun.j3d.utils.compression.CompressedGeometryFile)"><!-- --></A><H3>
+compress</H3>
+<PRE>
+public void <B>compress</B>(java.lang.String&nbsp;objFileName,
+ com.sun.j3d.utils.compression.CompressedGeometryFile&nbsp;file)
+ throws java.io.IOException</PRE>
+<DL>
+<DD>Compress the specified .obj file and add it to the end of an open
+ compressed geometry file.<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>objFileName</CODE> - String object representing the path to a .obj file<DD><CODE>file</CODE> - a currently open CompressedGeometryFile object<DT><B>Throws:</B><DD>java.io.IOException - - if write fails</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compress(java.io.Reader)"><!-- --></A><H3>
+compress</H3>
+<PRE>
+public javax.media.j3d.CompressedGeometry <B>compress</B>(java.io.Reader&nbsp;reader)</PRE>
+<DL>
+<DD>Compress the specified .obj file into a CompressedGeometry node
+ component.<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>reader</CODE> - an open .obj file<DT><B>Returns:</B><DD>a CompressedGeometry node component</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compress(java.io.Reader, com.sun.j3d.utils.compression.CompressedGeometryFile)"><!-- --></A><H3>
+compress</H3>
+<PRE>
+public void <B>compress</B>(java.io.Reader&nbsp;reader,
+ com.sun.j3d.utils.compression.CompressedGeometryFile&nbsp;file)
+ throws java.io.IOException</PRE>
+<DL>
+<DD>Compress the specified .obj file and add it to the end of an open
+ compressed geometry file.<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>reader</CODE> - an open .obj file<DD><CODE>file</CODE> - an open CompressedGeometryFile object<DT><B>Throws:</B><DD>java.io.IOException - - if write fails</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compress(java.net.URL)"><!-- --></A><H3>
+compress</H3>
+<PRE>
+public javax.media.j3d.CompressedGeometry <B>compress</B>(java.net.URL&nbsp;url)</PRE>
+<DL>
+<DD>Compress the specified .obj file into a CompressedGeometry node
+ component.<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>url</CODE> - Uniform Resource Locator for the .obj file<DT><B>Returns:</B><DD>a CompressedGeometry node component</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compress(java.net.URL, com.sun.j3d.utils.compression.CompressedGeometryFile)"><!-- --></A><H3>
+compress</H3>
+<PRE>
+public void <B>compress</B>(java.net.URL&nbsp;url,
+ com.sun.j3d.utils.compression.CompressedGeometryFile&nbsp;file)
+ throws java.io.IOException</PRE>
+<DL>
+<DD>Compress the specified .obj file and add it to the end of an open
+ compressed geometry file.<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>url</CODE> - Uniform Resource Locator for the .obj file<DD><CODE>file</CODE> - a currently open CompressedGeometryFile object<DT><B>Throws:</B><DD>java.io.IOException - - if write fails</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+<!-- ========== START OF NAVBAR ========== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="overview-tree.html"><FONT ID="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="deprecated-list.html"><FONT ID="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="index-all.html"><FONT ID="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="help-doc.html"><FONT ID="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
+ </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+&nbsp;PREV CLASS&nbsp;
+&nbsp;NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index.html" TARGET="_top"><B>FRAMES</B></A> &nbsp;
+&nbsp;<A HREF="ObjectFileCompressor.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+ SUMMARY: &nbsp;INNER&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_com.sun.j3d.loaders.objectfile.ObjectFile">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: &nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<!-- =========== END OF NAVBAR =========== -->
+
+<HR>
+
+</BODY>
+</HTML>
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 @@
+<?xml version="1.0"?>
+
+<!--
+/*
+ * $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$
+ */
+ -->
+
+<project basedir="." default="compile">
+ <target name="compile">
+ <javac debug="true" deprecation="true" destdir="." srcdir=".">
+ </javac>
+ </target>
+
+ <target name="all" depends="compile">
+ </target>
+
+ <target description="Clean all build products." name="clean">
+ <delete>
+ <fileset dir=".">
+ <include name="**/*.class"/>
+ </fileset>
+ </delete>
+ </target>
+
+</project>
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> <object index>") ;
+ 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() ;
+ }
+}