//package demos.gears; import java.awt.*; import java.awt.event.*; import net.java.games.jogl.*; import java.awt.image.*; public class Start { public static void main(String[] args) { Frame frame = new Frame("Start"); GLCanvas canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities()); // Use debug pipeline canvas.setGL(new DebugGL(canvas.getGL())); //System.err.println("CANVAS GL IS: " + canvas.getGL().getClass().getName()); //System.err.println("CANVAS GLU IS: " + canvas.getGLU().getClass().getName()); canvas.addGLEventListener(new StartRenderer()); frame.add(canvas); frame.setSize(300, 300); frame.show(); /* final Animator animator = new Animator(canvas); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { animator.stop(); System.exit(0); } }); animator.start(); */ } static class StartRenderer implements GLEventListener, MouseListener, MouseMotionListener { private GL gl; private GLU glu; private GLDrawable gldrawable; public void init(GLDrawable drawable) { gl = drawable.getGL(); glu = drawable.getGLU(); this.gldrawable = drawable; //System.err.println("INIT GL IS: " + gl.getClass().getName()); gl.glClearColor(1,1,1,0); } public void reshape(GLDrawable drawable, int x, int y, int width, int height) { //gl.glViewport(0,width, 0,height); gl.glViewport(0, 0, width, height); gl.glMatrixMode(GL.GL_PROJECTION); gl.glLoadIdentity(); gl.glOrtho(0,width, height, 0, -1,1); gl.glMatrixMode(GL.GL_MODELVIEW); } public void display(GLDrawable drawable) { gl.glMatrixMode(GL.GL_MODELVIEW); gl.glLoadIdentity(); gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT); gl.glColor4f(1,0,0,1); gl.glRectf(20,20, 70,50); } public void displayChanged(GLDrawable drawable, boolean modeChanged, boolean deviceChanged) {} // Methods required for the implementation of MouseListener public void mouseEntered(MouseEvent e) {} public void mouseExited(MouseEvent e) {} public void mousePressed(MouseEvent e) { /* prevMouseX = e.getX(); prevMouseY = e.getY(); if ((e.getModifiers() & e.BUTTON3_MASK) != 0) { mouseRButtonDown = true; } */ } public void mouseReleased(MouseEvent e) { /* if ((e.getModifiers() & e.BUTTON3_MASK) != 0) { mouseRButtonDown = false; } */ } public void mouseClicked(MouseEvent e) {} // Methods required for the implementation of MouseMotionListener public void mouseDragged(MouseEvent e) { /* int x = e.getX(); int y = e.getY(); Dimension size = e.getComponent().getSize(); float thetaY = 360.0f * ( (float)(x-prevMouseX)/(float)size.width); float thetaX = 360.0f * ( (float)(prevMouseY-y)/(float)size.height); prevMouseX = x; prevMouseY = y; view_rotx += thetaX; view_roty += thetaY; */ } public void mouseMoved(MouseEvent e) {} public static class TessCallback extends net.java.games.jogl.GLUtesselatorCallbackAdapter { GL gl; GLU glu; public TessCallback(GL gl, GLU glu) { this.gl = gl; this.glu = glu; }; public void begin(int type) { gl.glBegin(type); } public void end() { gl.glEnd(); } public void vertex(Object data) { if (data instanceof double[]) { double[] d = (double[]) data; if (d.length == 6) { double[] d2 = {d[0], d[1], d[2]}; gl.glVertex3dv(d2); d2 = new double[]{d[3], d[4], d[5]}; gl.glColor3dv(d2); } else if (d.length == 3) { gl.glVertex3dv(d); } } } public void error(int errnum) { String estring; estring = glu.gluErrorString(errnum); System.out.println("Tessellation Error: " + estring); //System.exit(0); throw new RuntimeException(); } public void combine(double[] coords, Object[] data, float[] weight, Object[] outData) { double[] vertex = new double[6]; int i; vertex[0] = coords[0]; vertex[1] = coords[1]; vertex[2] = coords[2]; for (i = 3; i < 6; i++) vertex[i] = weight[0] * ((double[]) data[0])[i] + weight[1] * ((double[]) data[1])[i] + weight[2] * ((double[]) data[2])[i] + weight[3] * ((double[]) data[3])[i]; outData[0] = vertex; } }//End TessCallback } }