java left logo
java middle logo
java right logo
 

Home arrow Other API Tips arrow Java3D arrow How to create a Lighting Plane
 
 
Main Menu
Home
Java Tutorials
Book Reviews
Java SE Tips
Java ME Tips
Java EE Tips
Other API Tips
Java Applications
Java Libraries
Java Games
Java Network
Java Forums
Java Blog




Most Visited Tips
Java SE Tips
Java ME Tips
Java EE Tips
Other API Tips
Java Applications
Java Libraries
Java Games
Book Reviews
Top Rated Tips
Java SE Tips
Java ME Tips
Java EE Tips
Other API Tips
Java Applications
Java Libraries
Java Games
Book Reviews


Statistics
Registered Users: 4092
Java SE Tips: 614
Java ME Tips: 202
Java EE Tips: 183
Other API Tips: 779
Java Applications: 298
Java Libraries: 209
Java Games: 16
Book Reviews:
 
 
 
How to create a Lighting Plane E-mail
User Rating: / 4
PoorBest 

This Java tip creates a Lighting Plane using Java3D.


Image

import java.applet.Applet;
import java.awt.BorderLayout;

import javax.media.j3d.AmbientLight;
import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingBox;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.IndexedQuadArray;
import javax.media.j3d.Light;
import javax.media.j3d.Material;
import javax.media.j3d.Node;
import javax.media.j3d.PointLight;
import javax.media.j3d.QuadArray;
import javax.media.j3d.Shape3D;
import javax.media.j3d.SpotLight;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Point3f;
import javax.vecmath.Vector3f;

import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.SimpleUniverse;

/**
 * LightsNPlanesApp creates
 */
public class LightsNPlanesApp extends Applet {

  TransformGroup createTG(float x, float y, float z) {
    Vector3f position = new Vector3f(x, y, z);
    Transform3D translate = new Transform3D();
    translate.set(position);
    TransformGroup trans1 = new TransformGroup(translate);
    return trans1;
  }

  Appearance createMatAppear(Color3f dColor, Color3f sColor, float shine) {

    Appearance appear = new Appearance();
    Material material = new Material();
    material.setDiffuseColor(dColor);
    material.setSpecularColor(sColor);
    material.setShininess(shine);
    appear.setMaterial(material);

    return appear;
  }

  public LightsNPlanesApp() {
    setLayout(new BorderLayout());
    Canvas3D c = new Canvas3D(null);
    add("Center", c);

    BoundingSphere bounds = new BoundingSphere(new Point3d()0.1);

    Vector3f direction = new Vector3f(0.0f, -1.0f0.0f);
    Point3f position = new Point3f(0.0f0.5f, -0.3f);

    Color3f white = new Color3f(1.0f1.0f1.0f);
    Color3f red = new Color3f(1.0f0.0f0.0f);
    Color3f green = new Color3f(0.0f1.0f0.0f);
    Color3f blue = new Color3f(0.0f0.0f1.0f);

    BranchGroup scene = new BranchGroup();

    IndexedQuadArray qa = new IndexedQuadArray(9, QuadArray.COORDINATES
        | QuadArray.NORMALS, 16);
    qa.setCoordinate(0new Point3f(-0.3f0.3f, -0.3f));
    qa.setCoordinate(1new Point3f(0.0f0.3f, -0.3f));
    qa.setCoordinate(2new Point3f(0.3f0.3f, -0.3f));
    qa.setCoordinate(3new Point3f(-0.3f0.0f0.0f));
    qa.setCoordinate(4new Point3f(0.0f0.0f0.0f));
    qa.setCoordinate(5new Point3f(0.3f0.0f0.0f));
    qa.setCoordinate(6new Point3f(-0.3f, -0.3f0.3f));
    qa.setCoordinate(7new Point3f(0.0f, -0.3f0.3f));
    qa.setCoordinate(8new Point3f(0.3f, -0.3f0.3f));
    Vector3f n = new Vector3f(0.0f0.6f0.8f);
    n.normalize();
    qa.setNormal(0, n);
    qa.setNormal(1, n);
    qa.setNormal(2, n);
    qa.setNormal(3, n);
    qa.setNormal(4, n);
    qa.setNormal(5, n);
    qa.setNormal(6, n);
    qa.setNormal(7, n);
    qa.setNormal(8, n);

    qa.setCoordinateIndex(00);
    qa.setCoordinateIndex(13);
    qa.setCoordinateIndex(24);
    qa.setCoordinateIndex(31);
    qa.setCoordinateIndex(41);
    qa.setCoordinateIndex(54);
    qa.setCoordinateIndex(65);
    qa.setCoordinateIndex(72);
    qa.setCoordinateIndex(83);
    qa.setCoordinateIndex(96);
    qa.setCoordinateIndex(107);
    qa.setCoordinateIndex(114);
    qa.setCoordinateIndex(124);
    qa.setCoordinateIndex(137);
    qa.setCoordinateIndex(148);
    qa.setCoordinateIndex(155);

    TransformGroup trans1 = createTG(-0.7f0.0f, -0.5f);
    scene.addChild(trans1);

    TransformGroup trans2 = createTG(0.0f0.0f, -0.5f);
    scene.addChild(trans2);

    TransformGroup trans3 = createTG(0.7f0.0f, -0.5f);
    scene.addChild(trans3);

    Appearance qAppear = createMatAppear(white, white, 5.0f);
    Shape3D p1 = new Shape3D(qa, qAppear);
    //    p1.setBoundsAutoCompute(false);
    p1.setBounds(bounds);
    p1.setCapability(Node.ALLOW_BOUNDS_READ);
    trans1.addChild(p1);

    Shape3D p2 = new Shape3D(qa, qAppear);
    p2.setBounds(bounds);
    p2.setCapability(Node.ALLOW_BOUNDS_READ);
    trans2.addChild(p2);

    Shape3D p3 = new Shape3D(qa, qAppear);
    p3.setBounds(bounds);
    p3.setCapability(Node.ALLOW_BOUNDS_READ);
    trans3.addChild(p3);

    AmbientLight lightA = new AmbientLight();
    lightA.setInfluencingBounds(new BoundingSphere());
    lightA.setCapability(Light.ALLOW_INFLUENCING_BOUNDS_READ);
    scene.addChild(lightA);

    DirectionalLight lightD = new DirectionalLight();
    lightD.setInfluencingBounds(bounds);
    lightD.setBoundsAutoCompute(false);
    lightD.setCapability(Light.ALLOW_INFLUENCING_BOUNDS_READ);
    lightD.setDirection(direction);
    lightD.setColor(red);
    trans1.addChild(lightD);

    PointLight lightP = new PointLight();
    lightP.setInfluencingBounds(bounds);
    lightP.setCapability(Light.ALLOW_INFLUENCING_BOUNDS_READ);
    lightP.setPosition(position);
    lightP.setColor(green);
    trans2.addChild(lightP);

    SpotLight lightS = new SpotLight();
    lightS.setInfluencingBounds(bounds);
    lightS.setCapability(Light.ALLOW_INFLUENCING_BOUNDS_READ);
    lightS.setPosition(position);
    lightS.setDirection(direction);
    lightS.setSpreadAngle(0.3f);
    lightS.setConcentration(1.0f);
    lightS.setColor(blue);
    trans3.addChild(lightS);

    Background background = new Background();
    background.setApplicationBounds(new BoundingSphere());
    background.setColor(1.0f1.0f1.0f);
    scene.addChild(background);

    scene.compile();
    System.out.print("bounds object: ");
    System.out.println(bounds);

    System.out.print("influencing bounds for lightA: ");
    System.out.println(lightA.getInfluencingBounds());

    System.out.print("influencing bounds for lightD: ");
    System.out.println(lightD.getInfluencingBounds());

    System.out.print("influencing bounds for lightP: ");
    System.out.println(lightP.getInfluencingBounds());

    System.out.print("influencing bounds for lightS: ");
    System.out.println(lightS.getInfluencingBounds());

    System.out.print("bounds for plane1: ");
    System.out.println(p1.getBounds());

    System.out.print("bounds for plane2: ");
    System.out.println(p2.getBounds());

    System.out.print("bounds for plane3: ");
    System.out.println(p3.getBounds());

    BoundingSphere bs0 = new BoundingSphere(new Point3d(0.00.00.0)0.2);
    BoundingSphere bs1 = new BoundingSphere(new Point3d(-0.10.00.0),
        0.2);
    BoundingSphere bs2 = new BoundingSphere(new Point3d(-0.20.00.0),
        0.2);
    BoundingSphere bs3 = new BoundingSphere(new Point3d(-0.30.00.0),
        0.2);
    BoundingSphere bs4 = new BoundingSphere(new Point3d(-0.40.00.0),
        0.2);
    BoundingSphere bs5 = new BoundingSphere(new Point3d(-0.50.00.0),
        0.2);
    BoundingSphere bs6 = new BoundingSphere(new Point3d(-0.60.00.0),
        0.2);
    BoundingSphere bs7 = new BoundingSphere(new Point3d(-0.70.00.0),
        0.2);
    BoundingSphere bs8 = new BoundingSphere(new Point3d(-0.80.00.0),
        0.2);
    BoundingBox bb1 = new BoundingBox(bs1);
    BoundingBox bb2 = new BoundingBox(bs2);
    BoundingBox bb3 = new BoundingBox(bs3);
    BoundingBox bb4 = new BoundingBox(bs4);
    BoundingBox bb5 = new BoundingBox(bs5);
    BoundingBox bb6 = new BoundingBox(bs6);
    BoundingBox bb7 = new BoundingBox(bs7);
    BoundingBox bb8 = new BoundingBox(bs8);

    if (bs0.intersect(bs1))
      System.out.println("bs0 intersects bs1");
    if (bs0.intersect(bs2))
      System.out.println("bs0 intersects bs2");
    if (bs0.intersect(bs3))
      System.out.println("bs0 intersects bs3");
    if (bs0.intersect(bs4))
      System.out.println("bs0 intersects bs4");
    if (bs0.intersect(bs5))
      System.out.println("bs0 intersects bs5");
    if (bs0.intersect(bs6))
      System.out.println("bs0 intersects bs6");
    if (bs0.intersect(bs7))
      System.out.println("bs0 intersects bs7");
    if (bs0.intersect(bs8))
      System.out.println("bs0 intersects bs8");

    if (bs0.intersect(bb1))
      System.out.println("bs0 intersects bb1");
    if (bs0.intersect(bb2))
      System.out.println("bs0 intersects bb2");
    if (bs0.intersect(bb3))
      System.out.println("bs0 intersects bb3");
    if (bs0.intersect(bb4))
      System.out.println("bs0 intersects bb4");
    if (bs0.intersect(bb5))
      System.out.println("bs0 intersects bb5");
    if (bs0.intersect(bb6))
      System.out.println("bs0 intersects bb6");
    if (bs0.intersect(bb7))
      System.out.println("bs0 intersects bb7");
    if (bs0.intersect(bb8))
      System.out.println("bs0 intersects bb8");

    SimpleUniverse u = new SimpleUniverse(c);

    // This will move the ViewPlatform back a bit so the
    // objects in the scene can be viewed.
    u.getViewingPlatform().setNominalViewingTransform();

    u.addBranchGraph(scene);
  }

  public static void main(String argv[]) {
    new MainFrame(new LightsNPlanesApp()256128);
  }
}

 Related Tips

 
< Prev   Next >

Page 1 of 0 ( 0 comments )

You can share your information about this topic using the form below!

Please do not post your questions with this form! Thanks.


Name (required)


E-Mail (required)

Your email will not be displayed on the site - only to our administrator
Homepage(optional)



Comment Enable HTML code : Yes No



 
       
         
     
 
 
 
   
 
 
java bottom left
java bottom middle
java bottom right
RSS 0.91 FeedRSS 1.0 FeedRSS 2.0 FeedATOM FeedOPML Feed

Home - About Us - Privacy Policy
Copyright 2005 - 2008 www.java-tips.org
Java is a trademark of Sun Microsystems, Inc.