Hello!

Sorry to bother you again about this.

I have build a 3D-object with a couple of Shape3D objects, add them to a
TransformGroup. Now its time for the texture to the different
Shape3D-surfaces. So I guess that I have to start to set the cordinates for
the Texture before I chane my Appearance. I guess that the texturecordinets
should be the same as the cordinates for the Shape3D, correct me if I'm
wrong.

But I end upp with this Exception:
Exception in thread "main" java.lang.IllegalStateException: GeometryArray:
mu
be in TEXTURE_COORDINATE_3 mode to use this method
        at
javax.media.j3d.GeometryArray.setTextureCoordinates(GeometryArray.a:2281)
        at
com.sun.j3d.utils.geometry.GeometryInfo.fillIn(GeometryInfo.java:2)
        at
com.sun.j3d.utils.geometry.GeometryInfo.getGeometryArray(GeometryIjava:2583)
        at
com.sun.j3d.utils.geometry.GeometryInfo.getGeometryArray(GeometryI.java:2609
)
        at java3d.MTLB.createShape3Ds(MTLB.java:75)
        at java3d.MTLB.createTransformGroup(MTLB.java:31)
        at java3d.MTLB.<init>(MTLB.java:16)
        at java3d.TestBuildGeomObject.<init>(TestBuildGeomObject.java:28)
        at java3d.MTLB.main(MTLB.java:258)

Below is my 2 classes to test this. The MTLB Class is the Shape3D and the
other one is just for viewing any Shape3D. You can turn the loaded Shape3D
around with the arrow keys.

So if any one could explain why I get the Exception it would be great.
Perhaps you could give some more hints to solve this if you see any thing
strange.

Best regards
Fredrik

---------------------------------------------------------------------

import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.*;
import java.awt.Frame;
import com.sun.j3d.utils.applet.MainFrame;

public class MTLB extends BranchGroup
{
        public MTLB()
        {
                Transform3D transform3D = new Transform3D();

                //Hole
                TransformGroup holeTransformGroup = createTransformGroup();
                holeTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
                holeTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
                transform3D.setTranslation( new Vector3d( 0.0, -2.0, -13.0 ) );
                holeTransformGroup.setTransform(transform3D);
                setCapability(BranchGroup.ALLOW_CHILDREN_READ );

        addChild( holeTransformGroup );

        compile();
        }

        public TransformGroup createTransformGroup()
        {
        // = {11, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 8, 5, 5};
                Shape3D[] shapes3Ds = createShape3Ds();
        TransformGroup transformGroup = new TransformGroup();

        for(int i = 0; i < shapes3Ds.length; i++)
        {
                        transformGroup.addChild( shapes3Ds[i] );
                }

        return transformGroup;
        }

        public Shape3D[] createShape3Ds()
        {
                float[][] coordinateData = createCoordinateData();
                Shape3D[] shapes3Ds = new Shape3D[coordinateData.length];

                GeometryInfo gi = null;
                NormalGenerator ng = new NormalGenerator();
                Stripifier st = new Stripifier();

                Appearance appearance = createMaterialAppearance();

                for(int i = 0; i < coordinateData.length; i++)
                {
                        //int format = GeometryArray.COORDINATES | 
GeometryArray.COLOR_3 |
GeometryArray.TEXTURE_COORDINATE_3;
                        //IndexedGeometryArray indexedGeometryArray = new 
IndexedGeometryArray(
coordinateData[i].length, format);
                        //gi = new GeometryInfo( indexedGeometryArray );
                        gi = new GeometryInfo( GeometryInfo.POLYGON_ARRAY );

                        gi.setCoordinates(coordinateData[i]);
                        int[] stripCount = { coordinateData[i].length/3 };
                        gi.setStripCounts(stripCount);

                        gi.setTextureCoordinateParams(1, 3);
                        gi.setTextureCoordinates(0, coordinateData[i]);

                        ng.generateNormals(gi);
                        gi.recomputeIndices();

                        st.stripify(gi);
                        gi.recomputeIndices();

                        shapes3Ds[i] = new Shape3D();
                        shapes3Ds[i].setAppearance( appearance );
                        shapes3Ds[i].setGeometry(gi.getGeometryArray());
                }

                return shapes3Ds;
        }

    public float[][] createCoordinateData()
    {
        float[][] data = new float[14][];//82*3


                //Back
        int i = 0;
        int j = 0;
                data[i] = new float[11*3];
                data[i][j++]= -1.0f; data[i][j++]= 0.6f; data[i][j++]= -0.2f; //0
                data[i][j++]= 1.0f; data[i][j++]= 0.6f; data[i][j++]= -0.2f; //1
                data[i][j++]= 1.0f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //2
                data[i][j++]= 1.5f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //3
                data[i][j++]= 1.35f; data[i][j++]= 1.7f; data[i][j++]= -0.05f; //4
                data[i][j++]= 0.8f; data[i][j++]= 1.9f; data[i][j++]= 0.0f; //4
                data[i][j++]= -0.8f; data[i][j++]= 1.9f; data[i][j++]= 0.0f; //5
                data[i][j++]= -1.35f; data[i][j++]= 1.7f; data[i][j++]= -0.05f; //4
                data[i][j++]= -1.5f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //6
                data[i][j++]= -1.0f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //7
                data[i][j++]= -1.0f; data[i][j++]= 0.6f; data[i][j++]= -0.2f; //8

        //Right lover side
        i++;
        j = 0;
                data[i] = new float[5*3];
        data[i][j++]= 1.0f; data[i][j++]= 0.6f; data[i][j++]= -0.2f; //1
        data[i][j++]= 1.0f; data[i][j++]= 0.6f; data[i][j++]= -5.0f; //1
        data[i][j++]= 1.0f; data[i][j++]= 1.3f; data[i][j++]= -5.5f; //2
        data[i][j++]= 1.0f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //3
        data[i][j++]= 1.0f; data[i][j++]= 0.6f; data[i][j++]= -0.2f; //4

                //Left lover side
        i++;
        j = 0;
                data[i] = new float[5*3];
                data[i][j++]= -1.0f; data[i][j++]= 0.6f; data[i][j++]= -0.2f; //1
                data[i][j++]= -1.0f; data[i][j++]= 0.6f; data[i][j++]= -5.0f; //1
                data[i][j++]= -1.0f; data[i][j++]= 1.3f; data[i][j++]= -5.5f; //2
                data[i][j++]= -1.0f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //3
        data[i][j++]= -1.0f; data[i][j++]= 0.6f; data[i][j++]= -0.2f; //4

        //Right wheel roof
        i++;
        j = 0;
                data[i] = new float[5*3];
        data[i][j++]= 1.0f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //1
        data[i][j++]= 1.55f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //1
        data[i][j++]= 1.55f; data[i][j++]= 1.3f; data[i][j++]= -5.0f; //1
        data[i][j++]= 1.0f; data[i][j++]= 1.3f; data[i][j++]= -5.0f; //1
        data[i][j++]= 1.0f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //1

                //Left wheel roof
        i++;
        j = 0;
                data[i] = new float[5*3];
                data[i][j++]= -1.0f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //1
                data[i][j++]= -1.55f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //1
                data[i][j++]= -1.55f; data[i][j++]= 1.3f; data[i][j++]= -5.0f; //1
                data[i][j++]= -1.0f; data[i][j++]= 1.3f; data[i][j++]= -5.0f; //1
        data[i][j++]= -1.0f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //1

        //Right upper side
        i++;
        j = 0;
                data[i] = new float[5*3];
        data[i][j++]= 1.5f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //1
        data[i][j++]= 1.5f; data[i][j++]= 1.3f; data[i][j++]= -3.3f; //1
        data[i][j++]= 1.35f; data[i][j++]= 1.7f; data[i][j++]= -3.3f; //1
        data[i][j++]= 1.35f; data[i][j++]= 1.7f; data[i][j++]= -0.05f; //1
        data[i][j++]= 1.5f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //1

        //Left upper side
        i++;
        j = 0;
                data[i] = new float[5*3];
        data[i][j++]= -1.5f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //1
        data[i][j++]= -1.5f; data[i][j++]= 1.3f; data[i][j++]= -3.3f; //1
        data[i][j++]= -1.35f; data[i][j++]= 1.7f; data[i][j++]= -3.3f; //1
        data[i][j++]= -1.35f; data[i][j++]= 1.7f; data[i][j++]= -0.05f; //1
        data[i][j++]= -1.5f; data[i][j++]= 1.3f; data[i][j++]= -0.1f; //1

        //Right roof
        i++;
        j = 0;
                data[i] = new float[5*3];
        data[i][j++]= 1.35f; data[i][j++]= 1.7f; data[i][j++]= -0.05f; //1
        data[i][j++]= 1.35f; data[i][j++]= 1.7f; data[i][j++]= -3.3f; //1
        data[i][j++]= 0.8f; data[i][j++]= 1.9f; data[i][j++]= -3.3f; //1
        data[i][j++]= 0.8f; data[i][j++]= 1.9f; data[i][j++]= 0.0f; //1
        data[i][j++]= 1.35f; data[i][j++]= 1.7f; data[i][j++]= -0.05f; //1

        //Left roof
        i++;
        j = 0;
                data[i] = new float[5*3];
        data[i][j++]= -1.35f; data[i][j++]= 1.7f; data[i][j++]= -0.05f; //1
        data[i][j++]= -1.35f; data[i][j++]= 1.7f; data[i][j++]= -3.3f; //1
        data[i][j++]= -0.8f; data[i][j++]= 1.9f; data[i][j++]= -3.3f; //1
        data[i][j++]= -0.8f; data[i][j++]= 1.9f; data[i][j++]= 0.0f; //1
        data[i][j++]= -1.35f; data[i][j++]= 1.7f; data[i][j++]= -0.05f; //1

        //Back Roof
        i++;
        j = 0;
                data[i] = new float[5*3];
        data[i][j++]= -0.8f; data[i][j++]= 1.9f; data[i][j++]= 0.0f; //1
        data[i][j++]= 0.8f; data[i][j++]= 1.9f; data[i][j++]= 0.0f; //1
        data[i][j++]= 0.8f; data[i][j++]= 1.9f; data[i][j++]= -3.3f; //1
        data[i][j++]= -0.8f; data[i][j++]= 1.9f; data[i][j++]= -3.3f; //1
        data[i][j++]= -0.8f; data[i][j++]= 1.9f; data[i][j++]= 0.0f; //1

        //Right Cabin side
        i++;
        j = 0;
                data[i] = new float[8*3];
        data[i][j++]= 1.5f; data[i][j++]= 1.3f; data[i][j++]= -3.3f; //1
        data[i][j++]= 1.1f; data[i][j++]= 1.3f; data[i][j++]= -4.8f; //1
        data[i][j++]= 1.05f; data[i][j++]= 1.5f; data[i][j++]= -4.8f; //1
        data[i][j++]= 1.05f; data[i][j++]= 1.6f; data[i][j++]= -4.5f; //1
        data[i][j++]= 1.05f; data[i][j++]= 1.9f; data[i][j++]= -4.15f; //1
        data[i][j++]= 1.0f; data[i][j++]= 1.9f; data[i][j++]= -3.5f; //1
        data[i][j++]= 1.35f; data[i][j++]= 1.7f; data[i][j++]= -3.3f; //1
        data[i][j++]= 1.5f; data[i][j++]= 1.3f; data[i][j++]= -3.3f; //1

        //Left Cabin side
        i++;
        j = 0;
                data[i] = new float[8*3];
        data[i][j++]= -1.5f; data[i][j++]= 1.3f; data[i][j++]= -3.3f; //1
        data[i][j++]= -1.1f; data[i][j++]= 1.3f; data[i][j++]= -4.8f; //1
        data[i][j++]= -1.05f; data[i][j++]= 1.5f; data[i][j++]= -4.8f; //1
        data[i][j++]= -1.05f; data[i][j++]= 1.6f; data[i][j++]= -4.5f; //1
        data[i][j++]= -1.05f; data[i][j++]= 1.9f; data[i][j++]= -4.15f; //1
        data[i][j++]= -1.0f; data[i][j++]= 1.9f; data[i][j++]= -3.5f; //1
        data[i][j++]= -1.35f; data[i][j++]= 1.7f; data[i][j++]= -3.3f; //1
        data[i][j++]= -1.5f; data[i][j++]= 1.3f; data[i][j++]= -3.3f; //1

        //Cabin Roof
        i++;
        j = 0;
                data[i] = new float[5*3];
        data[i][j++]= -1.0f; data[i][j++]= 1.9f; data[i][j++]= -3.5f; //1
        data[i][j++]= 1.0f; data[i][j++]= 1.9f; data[i][j++]= -3.5f; //1
        data[i][j++]= 1.05f; data[i][j++]= 1.9f; data[i][j++]= -4.15f; //1
                data[i][j++]= -1.05f; data[i][j++]= 1.9f; data[i][j++]= -4.15f; //1
        data[i][j++]= -1.0f; data[i][j++]= 1.9f; data[i][j++]= -3.5f; //1

                //Windscreen
        i++;
        j = 0;
                data[i] = new float[5*3];
                data[i][j++]= -1.05f; data[i][j++]= 1.9f; data[i][j++]= -4.15f;
                data[i][j++]= 1.05f; data[i][j++]= 1.9f; data[i][j++]= -4.15f;
                data[i][j++]= 1.05f; data[i][j++]= 1.6f; data[i][j++]= -4.5f;
                data[i][j++]= -1.05f; data[i][j++]= 1.6f; data[i][j++]= -4.5f;
                data[i][j++]= -1.05f; data[i][j++]= 1.9f; data[i][j++]= -4.15f;

        return data;
    }

    public Appearance createMaterialAppearance()
    {

        Appearance materialAppear = new Appearance();
        PolygonAttributes polyAttrib = new PolygonAttributes();
        polyAttrib.setCullFace(PolygonAttributes.CULL_NONE);
        materialAppear.setPolygonAttributes(polyAttrib);

        Material material = new Material();
        material.setDiffuseColor(new Color3f(0.4f, 0.4f, 0.4f));
        materialAppear.setMaterial(material);

        return materialAppear;
    }

        public static void main(String[] args)
        {
                Frame frame = new MainFrame(new TestBuildGeomObject(), 600, 400);
    }

}

---------------------------------------------------------------------------

import java.applet.*;
import java.awt.*;
import java.awt.Frame;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.keyboard.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import javax.swing.*;
import com.sun.j3d.loaders.*;
import java.io.*;

import java.util.*;

public class TestBuildGeomObject extends Applet implements KeyListener
{
        BranchGroup branchGroup;

        TransformGroup transformGroup1;
        Canvas3D canvas3D;
        SimpleUniverse simpleUniverse;

        Car car = new Car();
        MTLB mtlb = new MTLB();

        public void init()
        {
                long start = System.currentTimeMillis();
                setLayout(new BorderLayout());
                GraphicsConfiguration config = 
SimpleUniverse.getPreferredConfiguration();
                canvas3D = new Canvas3D(config);
                canvas3D.addKeyListener( this );
                add("Center", canvas3D);
                simpleUniverse = new SimpleUniverse(canvas3D);

                simpleUniverse.addBranchGraph( addLight() );

                BranchGroup branchGroup1 = mtlb;
                transformGroup1 = (TransformGroup)branchGroup1.getChild(0);
                simpleUniverse.addBranchGraph( branchGroup1 );

                long end = System.currentTimeMillis();
                System.out.println((end-start)/1000);
        }

        private BranchGroup addLight()
        {
                BranchGroup branchGroup = new BranchGroup();
                LightManager lightManager = new LightManager(branchGroup);
                lightManager.addAmbientLight(new Color3f(1f, 1f, 1f));
                lightManager.addDirectionalLight(new Vector3f( -0.0f, 0.0f, -10.0f ), 
new
Color3f(0.5f, 0.5f, 0.5f));
                branchGroup.compile();
                return branchGroup;
        }

        public void keyTyped(KeyEvent e)
        {
        }

        public void keyPressed(KeyEvent e)
        {
                if( e.getKeyCode() == KeyEvent.VK_UP )
                {
                        ObjectRotationManager.rotX(transformGroup1, Math.PI/4);
                }
                else if( e.getKeyCode() == KeyEvent.VK_DOWN )
                {
                        ObjectRotationManager.rotX(transformGroup1, -Math.PI/4);
                }
                else if( e.getKeyCode() == KeyEvent.VK_RIGHT )
                {
                        ObjectRotationManager.rotY(transformGroup1, -Math.PI/4);
                }
                else if( e.getKeyCode() == KeyEvent.VK_LEFT )
                {
                        ObjectRotationManager.rotY(transformGroup1, Math.PI/4);
                }
                else if( e.getKeyCode() == KeyEvent.VK_Z )
                {
                        ObjectRotationManager.rotZ(transformGroup1, -Math.PI/4);
                }
                else if( e.getKeyCode() == KeyEvent.VK_X )
                {
                        ObjectRotationManager.rotZ(transformGroup1, Math.PI/4);
                }
        }

        public void keyReleased(KeyEvent e)
        {
        }

        public static void main(String[] args)
        {
                Frame frame = new MainFrame(new TestBuildGeomObject(), 600, 400);
    }
}

===========================================================================
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