Hello!

I'm trying to make a model of a EastGerman Tank (MTLB). So far I have made
the body, this example builds on Sun GeomInfoApp.java.

Now I wan't to add differnet texture on each surface (not only rectangles)
of the tank, but I can't understand how.

My class extends from BranchGroup and has a TransformGroup as child. That
transformGroup has a Shape3D as child with the geometry.

I really hope that it is possible to add different textures to differents
surfaces with other shapes than rectangeles and squers.

So if any one could help me with this, it would be great.

Thanks
Fredrik

Below is two classes to test this. With the arrow-keys and z and x you can
twist the tank around.

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

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;

        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( -1.0f, 0.0f, -8.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);
    }
}

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

import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.*;

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

                //Hole
                TransformGroup holeTransformGroup = new TransformGroup();
                holeTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
                holeTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
                transform3D.setTranslation( new Vector3d( 0.0, 0.0, -7.0 ) );
                holeTransformGroup.setTransform(transform3D);

                setCapability(BranchGroup.ALLOW_CHILDREN_READ );

                holeTransformGroup.addChild( createShape3D() );

        addChild( holeTransformGroup );

        compile();
        }

        public Shape3D createShape3D()
        {
        float[] coordinateData = createCoordinateData();
        int[] stripCount = {6, 6, 5, 5, 5, 5};

        GeometryInfo gi = new GeometryInfo(GeometryInfo.POLYGON_ARRAY);
        gi.setCoordinates(coordinateData);
        gi.setStripCounts(stripCount);

        Triangulator tr = new Triangulator();
        tr.triangulate(gi);
        gi.recomputeIndices();

        NormalGenerator ng = new NormalGenerator();
        ng.generateNormals(gi);
        gi.recomputeIndices();

        Stripifier st = new Stripifier();
        st.stripify(gi);
        gi.recomputeIndices();

        Shape3D part = new Shape3D();
        part.setAppearance(createMaterialAppearance());
        part.setGeometry(gi.getGeometryArray());

        BoundingSphere bounds = new BoundingSphere();

        return part;
        }

    public float[] createCoordinateData()
    {
        float[] data = new float[32*3];
        int i = 0;

        //Right side
        data[i++]= -2.0f; data[i++]= 0.0f; data[i++]= 1.0f; //0
        data[i++]= 1.5f; data[i++]= 0.0f; data[i++]= 1.0f; //1
        data[i++]= 2.0f; data[i++]= 0.7f; data[i++]= 1.0f; //2
        data[i++]= 1.3f; data[i++]= 1.0f; data[i++]= 1.0f; //3
        data[i++]= -2.0f; data[i++]= 1.0f; data[i++]= 1.0f; //4
        data[i++]= -2.0f; data[i++]= 0.0f; data[i++]= 1.0f; //5

        //Left side
        data[i++]= -2.0f; data[i++]= 0.0f; data[i++]= -1.0f; // 0 6
        data[i++]= -2.0f; data[i++]= 1.0f; data[i++]= -1.0f; //1 7
        data[i++]= 1.3f; data[i++]= 1.0f; data[i++]= -1.0f; // 2 8
        data[i++]= 2.0f; data[i++]= 0.7f; data[i++]= -1.0f; // 3 9
        data[i++]= 1.5f; data[i++]= 0.0f; data[i++]= -1.0f; // 4 10
        data[i++]= -2.0f; data[i++]= 0.0f; data[i++]= -1.0f; // 5 11

                //Front
        data[i++]=  1.5f; data[i++]= 0.0f; data[i++]= 1.0f; // 0 12
        data[i++]=  2.0f; data[i++]= 0.7f; data[i++]= 1.0f; // 1 13
        data[i++]=  2.0f; data[i++]= 0.7f; data[i++]= -1.0f; // 2 14
        data[i++]=  1.5f; data[i++]= 0.0f; data[i++]= -1.0f; // 3 15
        data[i++]=  1.5f; data[i++]= 0.0f; data[i++]= 1.0f; // 4 16

        //Hood
        data[i++]=  2.0f; data[i++]= 0.7f; data[i++]= 1.0f; // 0 17
        data[i++]=  1.3f; data[i++]= 1.0f; data[i++]= 1.0f; // 1 18
        data[i++]=  1.3f; data[i++]= 1.0f; data[i++]= -1.0f; // 2 19
        data[i++]=  2.0f; data[i++]= 0.7f; data[i++]= -1.0f; // 3 20
        data[i++]=  2.0f; data[i++]= 0.7f; data[i++]= 1.0f; // 4 21

        //Roof
        data[i++]=  1.3f; data[i++]=  1.0f; data[i++]= 1.0f;  // 0 22
        data[i++]= -2.0f; data[i++]=  1.0f; data[i++]= 1.0f;  // 1 23
        data[i++]= -2.0f; data[i++]=  1.0f; data[i++]= -1.0f; // 2 24
        data[i++]=  1.3f; data[i++]=  1.0f; data[i++]= -1.0f; // 3 25
        data[i++]=  1.3f; data[i++]=  1.0f; data[i++]= 1.0f; // 4 26

                //Back
        data[i++]= -2.0f; data[i++]=  1.0f; data[i++]=1.0f;  // 0 27
        data[i++]= -2.0f; data[i++]=  0.0f; data[i++]=1.0f;  // 1 28
        data[i++]= -2.0f; data[i++]=  0.0f; data[i++]=-1.0f; // 2 29
        data[i++]= -2.0f; data[i++]=  1.0f; data[i++]=-1.0f; // 3 30
        data[i++]= -2.0f; data[i++]=  1.0f; data[i++]=1.0f;  // 4 31

        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.7f, 0.7f, 0.7f));
        materialAppear.setMaterial(material);

        return materialAppear;
    }
}

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