package framework.test;

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;

import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.Clip;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Locale;
import javax.media.j3d.Transform3D;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3d;
import javax.vecmath.Vector3f;

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

import cv97.Constants;
import cv97.SceneGraph;
import cv97.j3d.SceneGraphJ3dObject;
import framework.RWT.RWTCanvas3D;
import framework.RWT.RWTFrame3D;
import framework.model3D.Model3D;
import framework.model3D.ModelFactory;
import framework.model3D.Object3D;
import framework.model3D.Position3D;
import framework.model3D.Universe;
import framework.view3D.Camera3D;



public class TestModel extends Frame implements Constants {
	SceneGraph sg;
	Canvas3D c;
	
	TestModel(){
		super("VRML Simple Viewer");
		
		
		sg = new SceneGraph(SceneGraph.NORMAL_GENERATION);
		setLayout(new BorderLayout());

		GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
        
		c = new Canvas3D(config);
		add("Center",c);
		SceneGraphJ3dObject sgObject = new SceneGraphJ3dObject(c,sg);		
		sg.setObject(sgObject);
		
//		sg.load("data\\Q07077-2.3ds");
//		sg.save("newGLViewLib.wrl");
		
//		setSize(400,400);
//		sg.print();
//		show();
		
	}
	public static void main(String[] args) {
//		TestModel testModel = new TestModel();
		RWTFrame3D frame = new RWTFrame3D();
		RWTCanvas3D canvas = new RWTCanvas3D();
		frame.add(canvas);
		
//		Model3D model = ModelFactory.loadModel("data\\doordemo.wrl");
//		Model3D model = ModelFactory.loadModel("data\\cube2.3ds");
		Model3D model = ModelFactory.loadModel("data\\Head.3ds");
		Object3D obj = model.createObject();
		Transform3D s = new Transform3D();
//		s.setScale(0.01);
		obj.children[0].scale.setTransform(s);
		
		Universe universe = new Universe();
		
        DirectionalLight light = new DirectionalLight( true,
                new Color3f(1.0f, 1.0f, 1.0f),
                new Vector3f(0.0f, 0.0f, -1.0f));
        light.setInfluencingBounds(new BoundingSphere(new Point3d(), 500.0));
        universe.place(light);
        
//		SimpleUniverse universe = new SimpleUniverse(testModel.c);
        universe.place(obj);
        universe.compile();
        
		Camera3D camera = new Camera3D(universe);
		camera.setViewPoint(new Position3D(0.0, 0.0, 1000.0));
		camera.adjust(0L);
		canvas.attachCamera(camera);
				
        frame.setVisible(true);
       // obj.rotate(0.0, 1.0, 0.0, 2 * Math.PI / 4);
//        Transform3D trans = new Transform3D();
//        Transform3D trans2 = new Transform3D();
//        obj.children[0].children[4].pos.getTransform(trans);
//        obj.children[0].children[0].rot.getTransform(trans2);
//        
//		Vector3d vector = new Vector3d();
//		trans.get(vector);
//		vector.x = vector.x + 20;
//		trans.set(vector);
//		
//		trans2.rotY(2 * Math.PI / 8);
//		
//		frame.setSize(600, 480);
//        obj.children[0].children[4].pos.setTransform(trans);
//		obj.children[0].children[0].rot.setTransform(trans2);
	}
}
