package test; import javax.media.opengl.GL; import javax.media.opengl.GL2; import javax.media.opengl.GL2ES1; import javax.media.opengl.GLAutoDrawable; import javax.media.opengl.GLEventListener; import javax.media.opengl.fixedfunc.GLLightingFunc; import javax.media.opengl.fixedfunc.GLMatrixFunc; import javax.media.opengl.glu.GLU; import org.geogebra.desktop.geogebra3D.euclidian3D.opengl.Animator; import org.geogebra.desktop.geogebra3D.euclidian3D.opengl.Component3D; import org.geogebra.desktop.geogebra3D.euclidian3D.opengl.RendererJogl; public class View implements GLEventListener { protected RendererJogl jogl; private Animator animator; /** canvas usable for a JPanel */ public Component3D canvas; private GLU glu; // for the GL Utility float r, g, b; int speed; long time; public View(float r, float g, float b, int speed) { this.r = r; this.g = g; this.b = b; this.speed = speed; // TODO Auto-generated method stub jogl = new RendererJogl(); // canvas = view; System.out.println("create 3D component"); RendererJogl.initCaps(false); canvas = RendererJogl.createComponent3D(false); System.out.println("add gl event listener"); canvas.addGLEventListener(this); System.out.println("create animator"); animator = RendererJogl.createAnimator(canvas, 60); // animator.setRunAsFastAsPossible(true); // animator.setRunAsFastAsPossible(false); System.out.println("start animator"); animator.start(); } @Override public void display(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); // get the OpenGL 2 graphics context gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); // clear // color // and depth // buffers gl.glLoadIdentity(); // reset the model-view matrix // ----- Your OpenGL rendering code here (Render a white triangle for // testing) ----- gl.glTranslatef(0.0f, 0.0f, -6.0f); // translate into the screen gl.glColor3f(r, g, b); gl.glBegin(GL.GL_TRIANGLES); // draw using triangles long delay = System.currentTimeMillis() - time; double angle = speed * delay * Math.PI / 2000; float c = (float) Math.cos(angle); float s = (float) Math.sin(angle); gl.glVertex3f(c, s, 0.0f); gl.glVertex3f(-s, c, 0.0f); gl.glVertex3f(-c, -s, 0.0f); gl.glEnd(); } @Override public void dispose(GLAutoDrawable arg0) { // TODO Auto-generated method stub } @Override public void init(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); // get the OpenGL graphics context glu = new GLU(); // get GL Utilities gl.glClearColor(0.0f, 0.0f, 0.0f, 0.0f); // set background (clear) color gl.glClearDepth(1.0f); // set clear depth value to farthest gl.glEnable(GL.GL_DEPTH_TEST); // enables depth testing gl.glDepthFunc(GL.GL_LEQUAL); // the type of depth test to do gl.glHint(GL2ES1.GL_PERSPECTIVE_CORRECTION_HINT, GL.GL_NICEST); // best // perspective // correction gl.glShadeModel(GLLightingFunc.GL_SMOOTH); // blends colors nicely, and // smoothes out // lighting time = System.currentTimeMillis(); } @Override public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height0) { GL2 gl = drawable.getGL().getGL2(); // get the OpenGL 2 graphics context int height = height0; if (height == 0) { height = 1; // prevent divide by zero } float aspect = (float) width / height; // Set the view port (display area) to cover the entire window gl.glViewport(0, 0, width, height); // Setup perspective projection, with aspect ratio matches viewport gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION); // choose projection matrix gl.glLoadIdentity(); // reset projection matrix glu.gluPerspective(45.0, aspect, 0.1, 100.0); // fovy, aspect, zNear, // zFar // Enable the model-view transform gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW); gl.glLoadIdentity(); // reset } }