import java.awt.*;
import java.awt.image.*;
import java.awt.color.*;
import java.awt.event.*;
import javax.swing.*;

import java.util.*;

import javax.vecmath.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.universe.*;


public class App implements WindowListener, Runnable {
    
    private JFrame container = null;
    
    private SimpleUniverse simpleU = null;
    private Canvas3D canvas3D = null;
	private GraphicsContext3D gc = null;
    
    private Thread myThread = null;
    private boolean finished = false;
    
    private Transform3D cmt = new Transform3D();
        
    private Cube c1;
    private Cube c2;
    
    public App() {
        

        container = new JFrame();
        
        container.addWindowListener(this);
            
		container.setTitle( "_immediate mode - test" );
        container.setSize( 640, 480 );
            
        GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
            
        canvas3D = new Canvas3D(config);
        canvas3D.stopRenderer();
        container.getContentPane().add("Center", canvas3D);
            
        simpleU = new SimpleUniverse(canvas3D);                        
        simpleU.getViewingPlatform().setNominalViewingTransform();
            
            
        gc = canvas3D.getGraphicsContext3D();
		gc.setAppearance(new Appearance());
        
        
        cmt.setScale(0.2);
        cmt.setTranslation(new Vector3f(0.0f, 0.0f, -30.0f));

        
        Transform3D t3d1 = new Transform3D();
        Transform3D t3d2 = new Transform3D();
        
        t3d1.setTranslation(new Vector3f(-20, 0,0));
        t3d2.setTranslation(new Vector3f( 20, 0,0));
        
        c1 = new Cube(t3d1);
        c2 = new Cube(t3d2);
        
        container.setVisible(true);
                
        
        myThread = new Thread(this);
        myThread.start();               
    }

    

    public void run() {
        while (!finished) {
            render();
            Thread.yield();
        }
    }
    
    
    public void render() {
        gc.clear();
        
        Background background = new Background(1.0f, 1.0f, 1.0f);
        
        gc.setBackground(background);
  
        gc.setModelTransform(cmt);
        
                
        c1.render(gc);
        c2.render(gc);
                
        canvas3D.swap();        
    }
    
    
    public void windowClosing(java.awt.event.WindowEvent windowEvent) {
        System.exit(0);
    }
    
    public void windowActivated(java.awt.event.WindowEvent windowEvent) {
    }
    
    public void windowDeiconified(java.awt.event.WindowEvent windowEvent) {
    }
    
    public void windowDeactivated(java.awt.event.WindowEvent windowEvent) {
    }
    
    public void windowIconified(java.awt.event.WindowEvent windowEvent) {
    }
    
    public void windowClosed(java.awt.event.WindowEvent windowEvent) {
    }
    
    public void windowOpened(java.awt.event.WindowEvent windowEvent) {
    }
    
    
    
    
    public static void main(String[] argv) {
        App myApp = new App();
    }
    
}
