This stuff sounds great!
I have another one for you guys.

How about H/W texture compression?
I didn't see projected textures either.  Sure would like to have that!
(for shadows, headlights, etc.)

I could go on..... :-)


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".

Reply via email to