Sans plus attendre, voici le code :

package org.clock;
 
import java.util.Calendar;
 
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.swing.JFrame;
 
import com.sun.opengl.util.FPSAnimator;
 
public class Clock implements GLEventListener
{
	private int heure, minute, seconde, cadran;
	private int minTic, heureTic;
 
	public static void main(String[] args)
	{
		new Clock();
	}
 
	public Clock()
	{
		JFrame frame = new JFrame("Horloge");
		GLCanvas canvas = new GLCanvas();
 
		canvas.addGLEventListener(this);
 
		FPSAnimator animator = new FPSAnimator(canvas, 24);
		animator.start();
 
		frame.add(canvas);
		frame.setSize(600,600);
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);	
	}
 
	public void createHeure(GL gl)
	{
		this.heure = gl.glGenLists(1);
 
		gl.glNewList(this.heure, GL.GL_COMPILE);		
		gl.glColor4f(0.30f, 0.36f, 0.65f, 0.8f);
		gl.glBegin(GL.GL_QUADS);
			gl.glVertex2f(0f, 0.65f);
			gl.glVertex2f(0.04f, 0f);
			gl.glVertex2f(0f, -0.05f);
			gl.glVertex2f(-0.04f, 0f);
		gl.glEnd();
		gl.glEndList();		
	}
 
	public void createMinute(GL gl)
	{
		this.minute = gl.glGenLists(1);
		gl.glNewList(this.minute, GL.GL_COMPILE);		
		gl.glColor4f(0.61f, 0.64f, 0.82f, 0.8f);
		gl.glBegin(GL.GL_QUADS);
			gl.glVertex2f(0f, 0.85f);
			gl.glVertex2f(0.04f, 0f);
			gl.glVertex2f(0f, -0.04f);
			gl.glVertex2f(-0.04f, 0f);
		gl.glEnd();
		gl.glEndList();		
	}
 
	public void createSeconde(GL gl)
	{
		this.seconde = gl.glGenLists(1);
		gl.glNewList(this.seconde, GL.GL_COMPILE);	
		gl.glColor4f(0.94f, 0.97f, 0.81f, 0.9f);
//		gl.glBegin(GL.GL_LINE_STRIP);
//		gl.glVertex2f(0f, 0.95f);
//		gl.glVertex2f(0.06f, 0.75f);
//		gl.glVertex2f(0.04f, 0.80f);
//		gl.glVertex2f(0.02f, 0.75f);
			gl.glBegin(GL.GL_QUADS);
			gl.glVertex2f(0f, 0.85f);
			gl.glVertex2f(0.02f, 0f);
			gl.glVertex2f(0f, -0.02f);
			gl.glVertex2f(-0.02f, 0f);
		gl.glEnd();	
		gl.glEndList();		
	}
 
	public void createHeureTic(GL gl)
	{
		this.heureTic = gl.glGenLists(1);
		gl.glNewList(this.heureTic, GL.GL_COMPILE);		
		gl.glColor4f(0.30f, 0.36f, 0.65f, 1f);
		gl.glBegin(GL.GL_QUADS);
			gl.glVertex2f(0f, 1f);
			gl.glVertex2f(0.02f, 0.98f);
			gl.glVertex2f(0f, 0.90f);
			gl.glVertex2f(-0.02f, 0.98f);
		gl.glEnd();
		gl.glEndList();
	}
 
	public void createMinTic(GL gl)
	{
		this.minTic = gl.glGenLists(1);
		gl.glNewList(this.minTic, GL.GL_COMPILE);		
		gl.glColor4f(0.61f, 0.64f, 0.82f, 1f);
		gl.glBegin(GL.GL_QUADS);
			gl.glVertex2f(0f, 0.94f);
			gl.glVertex2f(0.01f, 0.92f);
			gl.glVertex2f(0f, 0.90f);
			gl.glVertex2f(-0.01f, 0.92f);
		gl.glEnd();
		gl.glEndList();
	}
 
	public void createCadran(GL gl)
	{
		this.cadran = gl.glGenLists(1);
		gl.glNewList(this.cadran, GL.GL_COMPILE);
		gl.glPushMatrix();
		for(int i=0; i<12; i++)
		{
			gl.glRotated(30, 0, 0, 1);
			gl.glCallList(this.heureTic);
		}
		gl.glPopMatrix();
 
		gl.glPushMatrix();
		for(int i=0; i<60; i++)
		{
			if(i%5 != 0 && i != 0)
			{
				gl.glCallList(this.minTic);
			}
			gl.glRotated(6, 0, 0, 1);
		}
		gl.glPopMatrix();	
		gl.glEndList();
	}
 
	public void display(GLAutoDrawable drawable)
	{
		Calendar c = Calendar.getInstance();
		float heure = c.get(Calendar.HOUR_OF_DAY)%12;
		float minute = c.get(Calendar.MINUTE);
		float seconde = c.get(Calendar.SECOND);
		float milliseconde = c.get(Calendar.MILLISECOND);
		float aHeure = 360-(30f*heure+0.5f*minute+0.0083f*seconde+0.0000083f*milliseconde);
		float aMinute = 360-(6f*minute+0.1f*seconde+0.0001f*milliseconde);
		float aSeconde = 360-(6f*seconde+0.006f*milliseconde);
 
		GL gl = drawable.getGL();
 
	    gl.glEnable(GL.GL_BLEND);
	    gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
	    gl.glEnable(GL.GL_LINE_SMOOTH);
 
		gl.glClear(GL.GL_COLOR_BUFFER_BIT); //On efface le contenu	
 
		gl.glCallList(this.cadran);
 
		gl.glPushMatrix();
			gl.glRotated(aHeure, 0, 0, 1);
			gl.glCallList(this.heure);
		gl.glPopMatrix();
 
		gl.glPushMatrix();
			gl.glRotated(aMinute, 0, 0, 1);	
			gl.glCallList(this.minute);
		gl.glPopMatrix();
 
		gl.glPushMatrix();
			gl.glRotated(aSeconde, 0, 0, 1);
			gl.glCallList(this.seconde);
		gl.glPopMatrix();	
	}
 
	public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2)
	{}
 
	public void init(GLAutoDrawable drawable)
	{
		GL gl = drawable.getGL();
		gl.glClearColor(0.81f, 0.83f, 0.91f, 0.4f);
 
		this.createHeureTic(gl);
		this.createMinTic(gl);
		this.createCadran(gl);
 
		this.createHeure(gl);
		this.createMinute(gl);
		this.createSeconde(gl);
	}
 
	public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4)
	{}
 
}
 
java/jogl/horloge.txt · Dernière modification: 2008/08/13 13:56 (édition externe)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki