import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

import javax.media.j3d.*;
import javax.vecmath.*;

import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.image.*;

/**
Solution to Lab 10 by Rod Harris
*/

public class Lab10b
{
	private MyVirtualUniverse vu = new MyVirtualUniverse();


	public static void main(String[] args)
	{
		new Lab10b();
	}


	public Lab10b()
	{
		ApplicationFrame appFrame = new ApplicationFrame("Lab 10", 800, 600);
		appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		JPanel mainPanel = new JPanel(new BorderLayout());

		mainPanel.add(vu.getBoard(), BorderLayout.CENTER);

		appFrame.getContentPane().add(mainPanel);

		addContent();

		appFrame.setVisible(true);
	}


	public void addContent()
	{
		BranchGroup bg = new BranchGroup();
		TransformGroup tg = new TransformGroup();
		Transform3D t3d = new Transform3D();

		Appearance app = new Appearance();

		app.setTexture(loadTexture("./Brick.jpg"));

		Shape3D shape = new Shape3D(createGeometry(), app);

		t3d.set(new Vector3d(-.5, -.5, -3));
		tg.setTransform(t3d);
		tg.addChild(shape);
		bg.addChild(tg);

		vu.addBranchGraph(bg);
	}

	private Texture loadTexture(String s)
	{
		TextureLoader loader = new TextureLoader(s, null);
		Texture t = loader.getTexture();
		return t;
	}

	private Geometry createGeometry()
	{
		IndexedTriangleArray ita = new IndexedTriangleArray(4, IndexedTriangleArray.COORDINATES | IndexedTriangleArray.TEXTURE_COORDINATE_2, 6);

		ita.setCoordinate(0, new Point3d(0, 0, 0));
		ita.setCoordinate(1, new Point3d(1, 0, 0));
		ita.setCoordinate(2, new Point3d(0, 1, 0));
		ita.setCoordinate(3, new Point3d(1, 1, 0));

		ita.setCoordinateIndex(0, 0);
		ita.setCoordinateIndex(1, 1);
		ita.setCoordinateIndex(2, 2);

		ita.setCoordinateIndex(3, 1);
		ita.setCoordinateIndex(4, 3);
		ita.setCoordinateIndex(5, 2);

		ita.setTextureCoordinate(0, 0, (new TexCoord2f(0, 0)));
		ita.setTextureCoordinate(0, 1, (new TexCoord2f(1, 0)));
		ita.setTextureCoordinate(0, 2, (new TexCoord2f(0, 1)));
		ita.setTextureCoordinate(0, 3, (new TexCoord2f(1, 1)));

		ita.setTextureCoordinateIndex(0, 0, 0);
		ita.setTextureCoordinateIndex(0, 1, 1);
		ita.setTextureCoordinateIndex(0, 2, 2);

		ita.setTextureCoordinateIndex(0, 3, 1);
		ita.setTextureCoordinateIndex(0, 4, 3);
		ita.setTextureCoordinateIndex(0, 5, 2);

		return ita;
	}

}

