The most obvious is that you have your directional light commented out and hence not in the scene, thus no "shading".
You are also setting an emissive color on your material (i.e. it *is* the source of light).
- John Wright Starfire Research
Ugo Taddei wrote:
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".