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