Package eas.miscellaneous.java3D

Source Code of eas.miscellaneous.java3D.Load3DExample

package eas.miscellaneous.java3D;

import java.util.Enumeration;
import java.util.Hashtable;

import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Material;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JFrame;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import com.sun.j3d.loaders.Scene;
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.universe.SimpleUniverse;

/**
* An example for loading a geometric object and showing it in the scene. The
* names of the parts of the object are printed. The colour blue is assigned to
* one of the part.
*
* @author Frank Klawonn Last change 07.07.2005
*/
@SuppressWarnings("all")
public class Load3DExample extends JFrame {

    // The canvas to be drawn upon.
    public Canvas3D myCanvas3D;

    public Load3DExample() {

        // Mechanism for closing the window and ending the program.
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Default settings for the viewer parameters.
        myCanvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());

        // Construct the SimpleUniverse:
        // First generate it using the Canvas.
        SimpleUniverse simpUniv = new SimpleUniverse(myCanvas3D);

        // Default position of the viewer.
        simpUniv.getViewingPlatform().setNominalViewingTransform();

        // The scene is generated in this method.
        createSceneGraph(simpUniv);

        // Add some light to the scene.
        addLight(simpUniv);

        // The following three lines enable navigation through the scene using
        // the mouse.
        OrbitBehavior ob = new OrbitBehavior(myCanvas3D);
        ob.setSchedulingBounds(new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
                Double.MAX_VALUE));
        simpUniv.getViewingPlatform().setViewPlatformBehavior(ob);

        // Show the canvas/window.
        setTitle("An object loaded from a file");
        setSize(700, 700);
        getContentPane().add("Center", myCanvas3D);
        setVisible(true);

    }

    public static void main(String[] args) {
        Load3DExample le = new Load3DExample();
    }

    // In this method, the objects for the scene are generated and added to
    // the SimpleUniverse.
    public void createSceneGraph(SimpleUniverse su) {

        // Load an obj-file.
        ObjectFile f = new ObjectFile(ObjectFile.RESIZE);
        Scene s = null;

        try {
            s = f.load("./eas/miscellaneous/java3D/schiff.obj");
        } catch (Exception e) {
            System.out.println("File loading failed:" + e);
        }

        // Generate a transformation group for the loaded object.
        Transform3D tfObject = new Transform3D();
        tfObject.rotZ(0.4 * Math.PI);
        Transform3D xRotation = new Transform3D();
        xRotation.rotY(0.4 * Math.PI);
        tfObject.mul(xRotation);
        TransformGroup tgObject = new TransformGroup(tfObject);
        tgObject.addChild(s.getSceneGroup());

        // In the following way, the names of the parts of the object can be
        // obtained. The names are printed.
        Hashtable namedObjects = s.getNamedObjects();
        Enumeration enumer = namedObjects.keys();
        String name;
        while (enumer.hasMoreElements()) {
            name = (String) enumer.nextElement();
            System.out.println("Name: " + name);
        }

        // Assign the colour blue to the part named "flugdeck".
        Appearance lightBlueApp = new Appearance();
        setToMyDefaultAppearance(lightBlueApp, new Color3f(0.0f, 0.1f, 0.3f));
        Shape3D partOfTheObject = (Shape3D) namedObjects.get("flugdeck");
        partOfTheObject.setAppearance(lightBlueApp);

        BranchGroup theScene = new BranchGroup();

        theScene.addChild(tgObject);

        // The following four lines generate a white background.
        Background bg = new Background(new Color3f(1.0f, 1.0f, 1.0f));
        BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
                Double.MAX_VALUE);
        bg.setApplicationBounds(bounds);
        theScene.addChild(bg);

        theScene.compile();

        // Add the scene to the universe.
        su.addBranchGraph(theScene);
    }

    /**
     * Generates a default surface (Appearance) in a specified colour.
     *
     * @param app
     *            The Appearance for the surface.
     * @param col
     *            The colour.
     */
    public static void setToMyDefaultAppearance(Appearance app, Color3f col) {
        app.setMaterial(new Material(col, col, col, col, 150.0f));
    }

    // Some light is added to the scene here.
    public void addLight(SimpleUniverse su) {

        BranchGroup bgLight = new BranchGroup();

        BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
                100.0);
        Color3f lightColour1 = new Color3f(1.0f, 1.0f, 1.0f);
        Vector3f lightDir1 = new Vector3f(-1.0f, 0.0f, -0.5f);
        DirectionalLight light1 = new DirectionalLight(lightColour1, lightDir1);
        light1.setInfluencingBounds(bounds);

        bgLight.addChild(light1);
        su.addBranchGraph(bgLight);
    }
}
TOP

Related Classes of eas.miscellaneous.java3D.Load3DExample

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.