package immediate;

import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.geometry.Sphere;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import javax.swing.JWindow;
import java.awt.GraphicsEnvironment;
import java.awt.Dimension;

public class PureImmediate extends JWindow implements Runnable
{ View view;
  private Canvas3D canvas;
  private GraphicsContext3D gc = null;
  Color3f green  = new Color3f(0.0f, 1.0f, 0.0f);
  Color3f blue  = new Color3f(0.0f, 0.0f, 1.0f);
  Color3f red  = new Color3f(1.0f, 0.0f, 0.0f);
  static Dimension screenSize =java.awt.
                               Toolkit.
                               getDefaultToolkit().
                               getScreenSize();

    Lines line, line1;
    private Transform3D cmt = new Transform3D();
    private Alpha rotAlpha = new Alpha(-1, 6000);
    private SimpleUniverse u = null;

    public void render()
    {
	if (gc == null)
        {
         gc = canvas.getGraphicsContext3D();
	 gc.setAppearance(new Appearance());
         line=new Lines(green, green);
         line1=new Lines(red, red);
         view=canvas.getView();
	}
	double angle = rotAlpha.value() * 2.0*Math.PI;
	cmt.rotY(angle);
//	gc.setModelTransform(cmt);
        gc.setBufferOverride(true);
        view.setMinimumFrameCycleTime(0);
        gc.setStereoMode(GraphicsContext3D.STEREO_BOTH);
	gc.clear();
        gc.setStereoMode(GraphicsContext3D.STEREO_LEFT);
	gc.draw(line.getLine());
        gc.setStereoMode(GraphicsContext3D.STEREO_RIGHT);
        gc.draw(line1.getLine1());
	canvas.swap();
    }
    public void run()
    {
	while (true) {
	    render();
	    Thread.yield();
	}
    }
    public PureImmediate()
    {
     super();
        GraphicsConfigTemplate3D g3d = new GraphicsConfigTemplate3D();
        g3d.setStereo(GraphicsConfigTemplate3D.REQUIRED);
        GraphicsConfiguration config = GraphicsEnvironment.
                                   getLocalGraphicsEnvironment().
                                   getDefaultScreenDevice().
                                   getBestConfiguration(g3d);

      canvas = new Canvas3D(config);
      getContentPane().add(canvas, BorderLayout.CENTER);

      canvas.stopRenderer();
      canvas.setStereoEnable(true);
      canvas.setDoubleBufferEnable(true);
      u = new SimpleUniverse(canvas);

      u.getViewingPlatform().setNominalViewingTransform();
      new Thread(this).start();
    }

    public static void main(String[] args)
    {
        PureImmediate win=new PureImmediate();
        win.setSize(screenSize.width, screenSize.height);
        win.setVisible(true);
    }
}
