Hello, I'm obviously a newbie in J3D...
I'm adapting some code for a static terrain generation app and I'm having trouble with the normals (or whatever!). I can't get a proper shading, despite having followed all the counselling I could find in the net. The followig doesn't seem to work (as I imagine it should): GeometryInfo gi = new GeometryInfo(ga); NormalGenerator norm = new NormalGenerator(); norm.generateNormals( gi ); I've put an example together. Hopefully someone will find what I'm doing wrong. Thanks for the help, and sorry to bother you! Cheers, Ugo import java.applet.Applet; import java.awt.*; import java.awt.image.BufferedImage; import java.io.*; import java.net.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.behaviors.mouse.MouseRotate; import com.sun.j3d.utils.geometry.GeometryInfo; import com.sun.j3d.utils.geometry.NormalGenerator; import com.sun.j3d.utils.image.TextureLoader; import com.sun.j3d.utils.universe.SimpleUniverse; // MouseRotate2App renders a single, interactively rotatable cube. public class TestTri extends Applet { public BranchGroup createSceneGraph() { // Create the root of the branch graph BranchGroup objRoot = new BranchGroup(); TransformGroup objRotate = null; MouseRotate myMouseRotate = null; Transform3D transform = new Transform3D(); // create ColorCube and MouseRotate behvaior objects //transform.setTranslation(new Vector3f(-0.6f, 0.0f, -0.6f)); objRotate = new TransformGroup(transform); objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); //objRoot.addChild(objRotate); //objRotate.addChild(new ColorCube(0.4)); myMouseRotate = new MouseRotate(); myMouseRotate.setTransformGroup(objRotate); myMouseRotate.setSchedulingBounds(new BoundingSphere()); objRoot.addChild(myMouseRotate); // create ColorCube and MouseRotate behvaior objects transform.setTranslation(new Vector3f( -.50f, -.50f, 0.0f)); objRotate = new TransformGroup(transform); objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objRoot.addChild(objRotate); GeometryArray ga = (GeometryArray)createGeom(); GeometryInfo gi = new GeometryInfo(ga); NormalGenerator norm = new NormalGenerator(); //norm.setCreaseAngle((float)Math.toRadians(180)); //?? norm.generateNormals( gi ); Shape3D shape = new Shape3D(); shape.setGeometry(gi.getGeometryArray()); shape.setAppearance(createAppear() ); objRotate.addChild( shape ); myMouseRotate = new MouseRotate(); myMouseRotate.setTransformGroup(objRotate); myMouseRotate.setSchedulingBounds(new BoundingSphere()); objRoot.addChild(myMouseRotate); DirectionalLight lightD = new DirectionalLight(); lightD.setDirection(new Vector3f(0.0f,-0.7f,-0.7f)); //lightD.setInfluencingBounds(bounds); //objRoot.addChild(lightD); objRoot.compile(); return objRoot; } public TestTri() { setLayout(new BorderLayout()); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas3D = new Canvas3D(config); add("Center", canvas3D); BranchGroup scene = createSceneGraph(); SimpleUniverse simpleU = new SimpleUniverse(canvas3D); simpleU.getViewingPlatform().setNominalViewingTransform(); simpleU.addBranchGraph(scene); } public Geometry createGeom(){ float[][] pts = null; pts = new float[][]{ {0,0,0},{1,0,0},{ 0.5f,0.5f,0.5f}, { 0,0,0},{ 0,1,0},{ 0.5f,0.5f,0.5f}, {1,0,0},{ 1,1,0},{ 0.5f,0.5f,0.5f}, {1,1,0},{ 0,1,0},{ 0.5f,0.5f,0.5f} }; TriangleArray ta = new TriangleArray( 12, GeometryArray.COORDINATES | GeometryArray.COLOR_4 | GeometryArray.TEXTURE_COORDINATE_2 | GeometryArray.NORMALS ); float coord[] = new float[3]; float texCoord[]= new float[2]; int coordCnt = 0; for (int i=0; i<pts.length; i++) { coord[0] = pts[i][ 0 ]; coord[1] = pts[i][ 1 ]; coord[2] = pts[i][ 2 ]; texCoord[0] = pts[i][ 0 ]; texCoord[1] = pts[i][ 1 ]; ta.setCoordinate( i , coord ); ta.setTextureCoordinate(0, i , texCoord); coordCnt++; } return ta; } public Appearance createAppear(){ /* TextureLoader loader = null; try { loader = new TextureLoader( new URL("file:///E:/java/source/java3d/tutorial/examples1_6/texture/brick.gif"), this); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } ImageComponent2D image = loader.getImage(); Texture2D texture = new Texture2D(Texture.BASE_LEVEL, Texture.RGBA, image.getWidth(), image.getHeight()); texture.setImage(0, image); */ PolygonAttributes polyAppear = new PolygonAttributes(); polyAppear.setPolygonMode(PolygonAttributes.POLYGON_FILL ); //polyAppear.setBackFaceNormalFlip( false ); polyAppear.setCullFace(PolygonAttributes.CULL_NONE); PointAttributes patts= new PointAttributes(); patts.setPointSize(3f); Material material = new Material(); Color3f white = new Color3f( 0.7f, 0.7f, 0.7f ); material.setAmbientColor( white ); material.setDiffuseColor( white ); material.setSpecularColor( white ); material.setShininess( 1f ); material.setLightingEnable( true ); material.setEmissiveColor( 0.72f, 0.72f, 0.72f ); ColoringAttributes ca = new ColoringAttributes(); //ca.setShadeModel( ColoringAttributes.NICEST ); Appearance appear = new Appearance(); //appear.setTexture(texture); appear.setPolygonAttributes(polyAppear); appear.setPointAttributes(patts); appear.setMaterial(material); appear.setColoringAttributes(ca); return appear; } public static void main(String[] args) throws IOException { Frame frame = new MainFrame(new TestTri(), 256, 256); } // end of main (method of MouseRotate2App) } // end of class MouseRotate2App =========================================================================== 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".