package com.daltonfilho.java3d;
import java.awt.*;
import java.io.FileReader;
import java.io.IOException;
import javax.swing.JFrame;
import javax.vecmath.*;
import javax.media.j3d.*;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.utils.universe.SimpleUniverse;
public class SimpleModelView extends JFrame {
private Canvas3D canvas;
private SimpleUniverse universe;
private BranchGroup root;
public SimpleModelView() throws IOException {
configureWindow();
configureCanvas();
conigureUniverse();
addModelToUniverse();
addLightsToUniverse();
root.compile();
universe.addBranchGraph(root);
}
private void configureWindow() {
setTitle("Basic Java3D Program");
setSize(640, 480);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
int locationX = (screenSize.width - getWidth()) / 2;
int locationY = (screenSize.height - getHeight()) / 2;
setLocation(locationX,locationY);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void configureCanvas() {
canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
canvas.setDoubleBufferEnable(true);
getContentPane().add(canvas, BorderLayout.CENTER);
}
private void conigureUniverse() {
universe = new SimpleUniverse(canvas);
universe.getViewingPlatform().setNominalViewingTransform();
}
private void addModelToUniverse() throws IOException {
Scene scene = getSceneFromFile("ROACH_mod.obj");
root = scene.getSceneGroup();
}
private void addLightsToUniverse() {
Bounds influenceRegion = new BoundingSphere();
Color3f lightColor = new Color3f(Color.BLUE);
Vector3f lightDirection = new Vector3f(-1F, -1F, -1F);
DirectionalLight light = new DirectionalLight(lightColor, lightDirection);
light.setInfluencingBounds(influenceRegion);
root.addChild(light);
}
public static Scene getSceneFromFile(String location) throws IOException {
ObjectFile file = new ObjectFile(ObjectFile.RESIZE);
return file.load(new FileReader(location));
}
public static void main(String[] args) {
try {
new SimpleModelView().setVisible(true);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}