|QuadArrays as created in previous tutorials, are not effected by lighting effects. To make the QuadArrays effected by light, the normals need to be specified.|
To start, lets use the Material and lighting from the previous tutorial.
Appearance app = new Appearance(); Material mat = new Material(); mat.setAmbientColor(new Color3f(0.0f,0.0f,1.0f)); mat.setDiffuseColor(new Color3f(0.7f,0.7f,0.7f)); mat.setSpecularColor(new Color3f(0.7f,0.7f,0.7f)); app.setMaterial(mat); BoundingSphere bounds = new BoundingSphere (new Point3d (0, 0.0, 5), 5.0); Color3f lightColor = new Color3f (1.0f, 1.0f, 1.0f); Vector3f light1Direction = new Vector3f (0.0f, 0.0f, -1f); DirectionalLight light1 = new DirectionalLight (lightColor, light1Direction); light1.setInfluencingBounds (bounds); objRoot.addChild (light1); AmbientLight ambientLightNode = new AmbientLight (lightColor); ambientLightNode.setInfluencingBounds (bounds); objRoot.addChild (ambientLightNode);
Next we will create a QuadArray with a new parameter QuadArray.NORMALS which will allow us to specify the Normal at each vertex.
QuadArray polygon1 = new QuadArray (4, QuadArray.COORDINATES | QuadArray.NORMALS); polygon1.setCoordinate(0, new Point3f (-3f,-1f,0f)); polygon1.setCoordinate(1, new Point3f (3f,-1f,0f)); polygon1.setCoordinate(2, new Point3f (3f,1f,0f)); polygon1.setCoordinate(3, new Point3f (-3f,1f,0f)); objRoot.addChild(new Shape3D(polygon1,app);In this example, each vertex on the polygon has the same normal, so we'll create a Vector3f for the normal and set it in the QuadArray
Vector3f polygon1Normal = new Vector3f(0f,0f,1f); polygon1.setNormal(0,polygonNormal); polygon1.setNormal(1,polygonNormal); polygon1.setNormal(2,polygonNormal); polygon1.setNormal(3,polygonNormal);
The 2 Screenshots show the polygon with the Material, and one without material (but with the ColoringAttributes used)
Monday, 18 November 2013