import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.glu.GLU;

public class lesson1 extends GLCanvas implements GLEventListener {
	private GLU glu;
	
	public static void main(String args[]) {
		GLCapabilities capabilities = new GLCapabilities(null);
	    capabilities.setRedBits(8);
	    capabilities.setBlueBits(8);
	    capabilities.setGreenBits(8);
	    capabilities.setAlphaBits(8);
	}
	
	public lesson1(int width, int height, GLCapabilities capabilities) {
		// Especifica el tamany inicial de la finestra
		//i el minim de requisits de les capabilities
		// Crida el constructor de GLCanvas
		super(capabilities); 
		// Estableix la mida de la finestra
        setSize(width, height); 
	}
	
	// drawable
    public void init(GLAutoDrawable d) {
    	// init el crida l'AWT quan la finestra esta preparada
    	// Posem propietats globals aqui
    	glu = new GLU();
    }
    
    // drawable
    public void reshape(GLAutoDrawable d, int x, int y, int width, int height) {
    	// Reshape es crida quan cambia el tamany de la finestra
    	// Aqui hi van canvis de camara etc per posar-los be al cambiar el tamany
    	GL gl = d.getGL();
        gl.glViewport(0, 0, width, height);
    }
    
    // drawable, modeChanged, deviceChanged
    public void displayChanged(GLAutoDrawable d, boolean mc, boolean dc) {
    	// Es cridaria en un escenari amb multiples pantalles
    }
    
    // drawable
    public void display(GLAutoDrawable d) {
    	// El crida per renderitzar
    	GL gl = d.getGL();
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
        setCamera(gl, glu, 100);
    }

    private void setCamera(GL gl, GLU glu, float distance) {
        // Change to projection matrix.
        gl.glMatrixMode(GL.GL_PROJECTION);
        gl.glLoadIdentity();

        // Perspective.
        float widthHeightRatio = (float) getWidth() / (float) getHeight();
        glu.gluPerspective(45, widthHeightRatio, 1, 1000);
        glu.gluLookAt(0, 0, distance, 0, 0, 0, 0, 1, 0);

        // Change back to model view matrix.
        gl.glMatrixMode(GL.GL_MODELVIEW);
        gl.glLoadIdentity();
    }
    
	public void dispose(GLAutoDrawable arg0) {
	}
}