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) { } }