Shawn,
>
> How about H/W texture compression?
This will be in the list for 1.4.
> I didn't see projected textures either. Sure would like to have that!
> (for shadows, headlights, etc.)
If I understand correctly, TexCoord4f is the missing piece for doing
projective textures. We are adding TexCoord4f in 1.3.
Charmaine Lee
Java3D Engineering Team
>
>
> Charmaine Lee wrote:
>
> >> The problem with using DECAL is that the surface is not shaded in DECAL
> >> mode.
> >
> > True. You can only use MODULATE in the first texture unit state
> > to attenuate the texture color. Doing DECAL in the second
> > texture unit state will only control the amount of blend between
> > the two textures, the primary color is lost for the
> > second texture.
> >
> >
> >
> >> Could you give more explaination of COMBINE as well as "advanced
> >> texturing" coming in Java3D 1.3.
> >>
> >
> > We are still in the process of doing the spec for 1.3 right now.
> > So nothing is final yet. The preliminary list of advanced texture
> > features going into Java3D 1.3 includes,
> > . cube environment mapping
> > . anisotropic filtering
> > . texture LOD & texture LOD bias
> > . ImageComponent subimage modification
> > . Texture Environment COMBINE
> > . detail texture, sharpen texture, texture filter4
> > . TexCoord4f
> >
> > The new COMBINE texture mode allows you to define a general
> > operation of how colors are combined in a texture unit state.
> > In particular, it allows you to specify where the colors are derived
> > from for the operation, they can be from texture, primary color,
> > constant color or result of previous texture unit.
> >
> > For example,
> > currently, as mentioned above, primary color is only available
> > to texture unit 0, but with COMBINE mode, you can specify primary
> > color as one of the arguments to the MODULATE mode in the nth
> > texture unit.
> > Hence if you want to apply two textures 0.4*TexA and (1-0.4)*TexB to
one
> > shape, with the new COMBINE mode, what you can do is first
> > use DECAL to blend the two textures according to the alpha factor
> > using the first two texture units,
> > and then assign MODULATE as the combine mode in the third texture
unit
> > with arg0 coming from the previous texture unit and arg1 coming from
> > the primary color. The last step will effectively apply lighting
> > to the blended textures.
> >
> > Another being proposed combine mode is DOT3, which allows you
> > to do dot product of two arguments. This can be used to do
> > bump mapping.
> >
> > We are working on the specification right now. More details
> > will be available when the specification is ready for review.
> > So stay tuned :)
> >
> > -Charmaine
> >
> >
> >
> >
> >
> >>> Shawn,
> >>>
> >>>
> >>>
> >>>> This example (as well as Java3D) will blend between two textures.
> >>>> However, you can not set the amount of blend, it's always 50/50.
> >>>
> >>>
> >>> Yes, the example that I included in the previous mail is just meant to
> >>> show Mike how multiple textures can be applied to a shape node in Java3D.
> >>>
> >>>
> >>>
> >>>
> >>>> And can you control the amount of blend/alpha (ex texture1.alpha = .2)
> >>>> directly - other than the actual alpha of each pixels?
> >>>
> >>>
> >>> Currently, you need to use the DECAL texture mode and use the
> >>> texture alpha value to control the amount of blend of the two textures.
> >>> In Java3D1.3, we are proposing a new COMBINE texture mode which will
> >>> give you more control on how to combine textures or how to combine
> >>> primary color with texture in general.
> >>>
> >>>
> >>> -Charmaine Lee
> >>> Java3D Engineering Team
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>
> >>>> Charmaine Lee wrote:
> >>>>
> >>>> > Mike,
> >>>> >
> >>>> > You can use multiple texture unit states to blend multiple
> >>>> > textures onto a shape. Included in the attachment is an
> >>>> > example of multi texturing in Java3D.
> >>>> >
> >>>> > -Charmaine Lee
> >>>> > Java3D Engineering Team
> >>>> >
> >>>> >
> >>>> >
> >>>> >
> >>>> >
> >>>> >> X-Originating-IP: [128.187.171.43]
> >>>> >> Mime-Version: 1.0
> >>>> >> X-OriginalArrivalTime: 14 Feb 2001 22:50:46.0351 (UTC)
> >>>> >
> >>>> > FILETIME=[916FF5F0:01C096D8]
> >>>> >
> >>>> >> Date: Wed, 14 Feb 2001 15:03:13 -0800
> >>>> >> From: Michael Smith <[EMAIL PROTECTED]>
> >>>> >> Subject: [JAVA3D] texture map blending
> >>>> >> To: [EMAIL PROTECTED]
> >>>> >>
> >>>> >> Java3D people,
> >>>> >> I'm doing research in image morphing and animation. I'd like
> >>>> to know
> >>>> >> how you would recommend handling the problem of blending two
different
> >>>> >> textures onto a shape (triangulated grid) in Java3d. We'd like to do
> >>>
> > it
> >
> >>>> >> taking advantage of java3d's hardware acceleration if we can.
> >>>> >> I've looked through the documentation on Java3D and couldn't
find
> >>>> >> anything that I thought would work for this. The BLEND option in the
> >>>> >> TextureAppearance class only works with regaurd to the blend color.
> >>>> >> One thing we've done in the past was to paint the first texture
> >>>> map at
> >>>> >> a fraction of it's value (ex texture1.alpha = .2 ) and then paint
> >>>> the second
> >>>> >> texture map on top of that with a the rest of the value(
> >>>> texture2.alpha = .8
> >>>> >> ). I don't know how you would do this in java3d.
> >>>> >> I would be most grateful for any advice you would have.
> >>>> >>
> >>>> >> -Mike Smith.
> >>>> >> _________________________________________________________________
> >>>> >> Get your FREE download of MSN Explorer at http://explorer.msn.com
> >>>> >>
> >>>> >>
> >>>>
===========================================================================
> >>>> >> To unsubscribe, send email to [EMAIL PROTECTED] and include in
> >>>> the body
> >>>> >> of the message "signoff JAVA3D-INTEREST". For general help, send
> >>>> email to
> >>>> >> [EMAIL PROTECTED] and include in the body of the message "help".
> >>>> >>
> >>>> >>
> >>>> >>
> >>>
> > ------------------------------------------------------------------------
> >
> >>>> >>
> >>>> >> /*
> >>>> >> * @(#)MultiTextureTest.java 1.8 01/01/11 07:40:34
> >>>> >> *
> >>>> >> * Copyright (c) 1996-2001 Sun Microsystems, Inc. All Rights
Reserved.
> >>>> >> *
> >>>> >> * Sun grants you ("Licensee") a non-exclusive, royalty free,
> >>>> license to use,
> >>>> >> * modify and redistribute this software in source and binary code
> >>>
> > form,
> >
> >>>> >> * provided that i) this copyright notice and license appear on all
> >>>> copies of
> >>>> >> * the software; and ii) Licensee does not utilize the software in a
> >>>> manner
> >>>> >> * which is disparaging to Sun.
> >>>> >> *
> >>>> >> * 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.
> >>>> >> *
> >>>> >> * This software is not designed or intended for use in on-line
> >>>> control of
> >>>> >> * aircraft, air traffic, aircraft navigation or aircraft
> >>>> communications; or in
> >>>> >> * the design, construction, operation or maintenance of any nuclear
> >>>> >> * facility. Licensee represents and warrants that it will not use or
> >>>> >> * redistribute the Software for such purposes.
> >>>> >> */
> >>>> >>
> >>>> >> import com.sun.j3d.utils.image.TextureLoader;
> >>>> >> import com.sun.j3d.utils.geometry.Box;
> >>>> >> import com.sun.j3d.utils.behaviors.vp.*;
> >>>> >> import java.applet.Applet;
> >>>> >> import java.awt.*;
> >>>> >> import java.awt.event.*;
> >>>> >> import com.sun.j3d.utils.applet.MainFrame;
> >>>> >> import com.sun.j3d.utils.universe.*;
> >>>> >> import javax.media.j3d.*;
> >>>> >> import javax.vecmath.*;
> >>>> >> import java.awt.image.BufferedImage;
> >>>> >>
> >>>> >> public class MultiTextureTest extends Applet implements ItemListener{
> >>>> >>
> >>>> >> Choice choice;
> >>>> >> TextureUnitState textureUnitState[] = new TextureUnitState[2];
> >>>> >> Texture stoneTex;
> >>>> >> Texture skyTex;
> >>>> >> Texture lightTex;
> >>>> >>
> >>>> >> private java.net.URL stoneImage = null;
> >>>> >> private java.net.URL skyImage = null;
> >>>> >>
> >>>> >> private SimpleUniverse u = null;
> >>>> >>
> >>>> >> public Texture createLightMap(){
> >>>> >>
> >>>> >> int width = 128;
> >>>> >> int height = 128;
> >>>> >> BufferedImage bimage = new BufferedImage(width, height,
> >>>> BufferedImage.TYPE_INT_RGB);
> >>>> >> int [] rgbArray = new int[width * height];
> >>>> >> int index, index2;
> >>>> >> int rgbInc = 256 / (width / 2 - 20);
> >>>> >> int rgbValue = 0;
> >>>> >> int k = width/2 - 5;
> >>>> >> int i, j, rgb;
> >>>> >>
> >>>> >> rgb = 0xff;
> >>>> >> rgbValue = rgb | (rgb << 8) | (rgb << 16) | (rgb << 24);
> >>>> >> for ( i = width / 2 - 1, j = 0; j < 10; j++, i--) {
> >>>> >> rgbArray[i] = rgbValue;
> >>>> >> }
> >>>> >>
> >>>> >> for (; i > 8; i--, rgb -= rgbInc) {
> >>>> >> rgbValue = rgb | (rgb << 8) | (rgb << 16) | (rgb << 24);
> >>>> >> rgbArray[i] = rgbValue;
> >>>> >> }
> >>>> >>
> >>>> >> for (; i >= 0; i--) {
> >>>> >> rgbArray[i] = rgbValue;
> >>>> >> }
> >>>> >>
> >>>> >> for (i = 0; i < width/2; i++) {
> >>>> >> rgbValue = rgbArray[i];
> >>>> >> index = i;
> >>>> >> index2 = (width - i - 1);
> >>>> >> for (j = 0; j < height; j++) {
> >>>> >> rgbArray[index] = rgbArray[index2] = rgbValue;
> >>>> >> index += width;
> >>>> >> index2 += width;
> >>>> >> }
> >>>> >> }
> >>>> >>
> >>>> >> bimage.setRGB(0, 0, width, height, rgbArray, 0, width);
> >>>> >>
> >>>> >>
> >>>> >> ImageComponent2D grayImage = new
> >>>> ImageComponent2D(ImageComponent.FORMAT_RGB, bimage);
> >>>> >>
> >>>> >> lightTex = new Texture2D(Texture.BASE_LEVEL, Texture.RGB, width,
> >>>> height);
> >>>> >> lightTex.setImage(0, grayImage);
> >>>> >>
> >>>> >> return lightTex;
> >>>> >> }
> >>>> >>
> >>>> >>
> >>>> >> public BranchGroup createSceneGraph() {
> >>>> >> // 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.4);
> >>>> >> objScale.setTransform(t3d);
> >>>> >> objRoot.addChild(objScale);
> >>>> >>
> >>>> >> TransformGroup objTrans = new TransformGroup();
> >>>> >> //write-enable for behaviors
> >>>> >> objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
> >>>> >> objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_READ );
> >>>> >> objTrans.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
> >>>> >> objScale.addChild(objTrans);
> >>>> >>
> >>>> >> Appearance ap = new Appearance();
> >>>> >>
> >>>> >> // load textures
> >>>> >> TextureAttributes texAttr1 = new TextureAttributes();
> >>>> >> texAttr1.setTextureMode(TextureAttributes.DECAL);
> >>>> >> TextureAttributes texAttr2 = new TextureAttributes();
> >>>> >> texAttr2.setTextureMode(TextureAttributes.MODULATE);
> >>>> >>
> >>>> >> TextureLoader tex = new TextureLoader(stoneImage, new
> >>>> String("RGB"), this);
> >>>> >> if (tex == null)
> >>>> >> return null;
> >>>> >> stoneTex = tex.getTexture();
> >>>> >>
> >>>> >> tex = new TextureLoader(skyImage, new String("RGB"), this);
> >>>> >> if (tex == null)
> >>>> >> return null;
> >>>> >> skyTex = tex.getTexture();
> >>>> >>
> >>>> >> lightTex = createLightMap();
> >>>> >>
> >>>> >>
> >>>> >> textureUnitState[0] = new TextureUnitState(stoneTex, texAttr1,
> >>>> null);
> >>>> >>
> >>>> textureUnitState[0].setCapability(TextureUnitState.ALLOW_STATE_WRITE);
> >>>> >>
> >>>> >> textureUnitState[1] = new TextureUnitState(lightTex, texAttr2,
> >>>> null);
> >>>> >>
> >>>> textureUnitState[1].setCapability(TextureUnitState.ALLOW_STATE_WRITE);
> >>>> >>
> >>>> >> ap.setTextureUnitState(textureUnitState);
> >>>> >>
> >>>> >> //Create a Box
> >>>> >> Box BoxObj = new Box(1.5f, 1.5f, 0.8f, Box.GENERATE_NORMALS |
> >>>> >> Box.GENERATE_TEXTURE_COORDS, ap, 2);
> >>>> >> // add it to the scene graph.
> >>>> >> objTrans.addChild(BoxObj);
> >>>> >>
> >>>> >> BoundingSphere bounds =
> >>>> >> new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
> >>>> >>
> >>>> >> //Shine it with two lights.
> >>>> >> Color3f lColor1 = new Color3f(0.7f, 0.7f, 0.7f);
> >>>> >> Color3f lColor2 = new Color3f(0.2f, 0.2f, 0.1f);
> >>>> >> Vector3f lDir1 = new Vector3f(-1.0f, -1.0f, -1.0f);
> >>>> >> Vector3f lDir2 = new Vector3f(0.0f, 0.0f, -1.0f);
> >>>> >> DirectionalLight lgt1 = new DirectionalLight(lColor1, lDir1);
> >>>> >> DirectionalLight lgt2 = new DirectionalLight(lColor2, lDir2);
> >>>> >> lgt1.setInfluencingBounds(bounds);
> >>>> >> lgt2.setInfluencingBounds(bounds);
> >>>> >> objScale.addChild(lgt1);
> >>>> >> objScale.addChild(lgt2);
> >>>> >>
> >>>> >> // Let Java 3D perform optimizations on this scene graph.
> >>>> >> objRoot.compile();
> >>>> >>
> >>>> >> return objRoot;
> >>>> >> }
> >>>> >>
> >>>> >> public MultiTextureTest (){
> >>>> >> }
> >>>> >>
> >>>> >> public MultiTextureTest(java.net.URL stoneURL, java.net.URL skyURL)
{
> >>>> >> stoneImage = stoneURL;
> >>>> >> skyImage = skyURL;
> >>>> >> }
> >>>> >>
> >>>> >> public void init() {
> >>>> >> if (stoneImage == null) {
> >>>> >> // the path to the image for an applet
> >>>> >> try {
> >>>> >> stoneImage = new java.net.URL(getCodeBase().toString() +
> >>>> >> "../images/stone.jpg");
> >>>> >> }
> >>>> >> catch (java.net.MalformedURLException ex) {
> >>>> >> System.out.println(ex.getMessage());
> >>>> >> System.exit(1);
> >>>> >> }
> >>>> >> }
> >>>> >>
> >>>> >> if (skyImage == null) {
> >>>> >> // the path to the image for an applet
> >>>> >> try {
> >>>> >> skyImage = new java.net.URL(getCodeBase().toString() +
> >>>> >> "../images/bg.jpg");
> >>>> >> }
> >>>> >> catch (java.net.MalformedURLException ex) {
> >>>> >> System.out.println(ex.getMessage());
> >>>> >> System.exit(1);
> >>>> >> }
> >>>> >> }
> >>>> >>
> >>>> >> setLayout(new BorderLayout());
> >>>> >> GraphicsConfiguration config =
> >>>> >> SimpleUniverse.getPreferredConfiguration();
> >>>> >>
> >>>> >> Canvas3D c = new Canvas3D(config);
> >>>> >> add("Center", c);
> >>>> >>
> >>>> >> // create the gui
> >>>> >> choice = new Choice();
> >>>> >> choice.addItem("stone + light");
> >>>> >> choice.addItem("stone");
> >>>> >> choice.addItem("lightMap");
> >>>> >> choice.addItem("sky");
> >>>> >> choice.addItem("stone + sky");
> >>>> >> choice.addItemListener(this);
> >>>> >> add("North", choice);
> >>>> >>
> >>>> >> BranchGroup scene = createSceneGraph();
> >>>> >> u = new SimpleUniverse(c);
> >>>> >>
> >>>> >> ViewingPlatform viewingPlatform = u.getViewingPlatform();
> >>>> >> // This will move the ViewPlatform back a bit so the
> >>>> >> // objects in the scene can be viewed.
> >>>> >> viewingPlatform.setNominalViewingTransform();
> >>>> >>
> >>>> >> // add orbit behavior but disable translate
> >>>> >> OrbitBehavior orbit =
> >>>> >> new OrbitBehavior(c, OrbitBehavior.DISABLE_TRANSLATE);
> >>>> >> 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.removeAllLocales();
> >>>> >> }
> >>>> >>
> >>>> >> public void itemStateChanged(ItemEvent e)
> >>>> >> {
> >>>> >> int index = choice.getSelectedIndex();
> >>>> >>
> >>>> >> switch (index) {
> >>>> >> case 0 : /* stone + light */
> >>>> >> textureUnitState[0].setTexture(stoneTex);
> >>>> >> textureUnitState[1].setTexture(lightTex);
> >>>> >> break;
> >>>> >> case 1 : /* stone */
> >>>> >> textureUnitState[0].setTexture(stoneTex);
> >>>> >> textureUnitState[1].setTexture(null);
> >>>> >> break;
> >>>> >> case 2 : /* light */
> >>>> >> textureUnitState[0].setTexture(null);
> >>>> >> textureUnitState[1].setTexture(lightTex);
> >>>> >> break;
> >>>> >> case 3 : /* sky */
> >>>> >> textureUnitState[0].setTexture(null);
> >>>> >> textureUnitState[1].setTexture(skyTex);
> >>>> >> break;
> >>>> >> case 4 : /* stone + sky */
> >>>> >> textureUnitState[0].setTexture(stoneTex);
> >>>> >> textureUnitState[1].setTexture(skyTex);
> >>>> >> break;
> >>>> >> default: /* both */
> >>>> >> break;
> >>>> >> }
> >>>> >> }
> >>>> >>
> >>>> >> public static void main(String argv[])
> >>>> >> {
> >>>> >> java.net.URL stoneURL = null;
> >>>> >> java.net.URL skyURL = null;
> >>>> >> // the path to the image for an application
> >>>> >> try {
> >>>> >> stoneURL = new java.net.URL("file:../images/stone.jpg");
> >>>> >> skyURL = new java.net.URL("file:../images/bg.jpg");
> >>>> >> }
> >>>> >> catch (java.net.MalformedURLException ex) {
> >>>> >> System.out.println(ex.getMessage());
> >>>> >> System.exit(1);
> >>>> >> }
> >>>> >> new MainFrame(new MultiTextureTest(stoneURL, skyURL), 750, 750);
> >>>> >> }
> >>>> >> }
> >>>> >>
> >>>> >> MultiTextureTest.java
> >>>> >>
> >>>> >> Content-Description:
> >>>> >>
> >>>> >> MultiTextureTest.java
> >>>> >> Content-Type:
> >>>> >>
> >>>> >> TEXT/plain
> >>>> >>
> >>>> >>
> >>>>
> >>>>
> >>>> --
> >>>> ___________________________________________________________
> >>>>
> >>>> Shawn Kendall Full Sail Real World Education
> >>>> Course Director 3300 University BLVD
> >>>> Real Time 3D for Gaming Winter Park FL 32792
> >>>> [EMAIL PROTECTED] http://www.fullsail.com
> >>>> ___________________________________________________________
> >>>>
> >>>>
> >>>> --
> >>>> ___________________________________________________________
> >>>>
> >>>> Shawn Kendall Full Sail Real World Education
> >>>> Course Director 3300 University BLVD
> >>>> Real Time 3D for Gaming Winter Park FL 32792
> >>>> [EMAIL PROTECTED] http://www.fullsail.com
> >>>> ___________________________________________________________
> >>>>
> >>>>
===========================================================================
> >>>> To unsubscribe, send email to [EMAIL PROTECTED] and include in the
body
> >>>> of the message "signoff JAVA3D-INTEREST". For general help, send email
to
> >>>> [EMAIL PROTECTED] and include in the body of the message "help".
> >>>
> >>>
> >>>
===========================================================================
> >>> To unsubscribe, send email to [EMAIL PROTECTED] and include in the
body
> >>> of the message "signoff JAVA3D-INTEREST". For general help, send email to
> >>> [EMAIL PROTECTED] and include in the body of the message "help".
> >>
> >>
> >> --
> >> ___________________________________________________________
> >>
> >> Shawn Kendall Full Sail Real World Education
> >> Course Director 3300 University BLVD
> >> Real Time 3D for Gaming Winter Park FL 32792
> >> [EMAIL PROTECTED] http://www.fullsail.com
> >> ___________________________________________________________
> >>
> >> ===========================================================================
> >> To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> >> of the message "signoff JAVA3D-INTEREST". For general help, send email to
> >> [EMAIL PROTECTED] and include in the body of the message "help".
> >
> >
> > ===========================================================================
> > To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> > of the message "signoff JAVA3D-INTEREST". For general help, send email to
> > [EMAIL PROTECTED] and include in the body of the message "help".
>
>
> --
> ___________________________________________________________
>
> Shawn Kendall Full Sail Real World Education
> Course Director 3300 University BLVD
> Real Time 3D for Gaming Winter Park FL 32792
> [EMAIL PROTECTED] http://www.fullsail.com
> ___________________________________________________________
>
> ===========================================================================
> To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> of the message "signoff JAVA3D-INTEREST". For general help, send email to
> [EMAIL PROTECTED] and include in the body of the message "help".
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".