aboutsummaryrefslogtreecommitdiffstats
path: root/demos/MiscDemos/DrawColoredPrimitives2.java
diff options
context:
space:
mode:
Diffstat (limited to 'demos/MiscDemos/DrawColoredPrimitives2.java')
-rw-r--r--demos/MiscDemos/DrawColoredPrimitives2.java302
1 files changed, 302 insertions, 0 deletions
diff --git a/demos/MiscDemos/DrawColoredPrimitives2.java b/demos/MiscDemos/DrawColoredPrimitives2.java
new file mode 100644
index 0000000..fad8668
--- /dev/null
+++ b/demos/MiscDemos/DrawColoredPrimitives2.java
@@ -0,0 +1,302 @@
+/**
+ * @(#) DrawColoredPrimitives2.java
+ * @(#) author: Joe Zimmerman (converted to Java by Sven Goethel)
+ */
+
+/* This program is free software under the license of LGPL */
+
+import java.applet.*;
+import java.awt.*;
+import java.awt.event.*;
+import java.lang.*;
+import java.util.*;
+import java.io.*;
+import java.util.*;
+import gl4java.GLContext;
+import gl4java.awt.GLAnimCanvas;
+import gl4java.applet.SimpleGLAnimApplet1;
+
+public class DrawColoredPrimitives2 extends SimpleGLAnimApplet1
+{
+
+ public void init()
+ {
+ super.init();
+ Dimension d = getSize();
+ canvas = new gldemo(d.width, d.height);
+ add("Center", canvas);
+ }
+
+ public static void main( String args[] ) {
+ DrawColoredPrimitives2 applet =
+ new DrawColoredPrimitives2();
+
+ Frame f = new Frame("DrawColoredPrimitives2");
+
+ f.addWindowListener( new WindowAdapter()
+ {
+ public void windowClosed(WindowEvent e)
+ {
+ System.exit(0);
+ }
+ public void windowClosing(WindowEvent e)
+ {
+ windowClosed(e);
+ }
+ }
+ );
+
+ f.setLayout(new BorderLayout());
+ f.add("Center", applet);
+ applet.setSize(500,300);
+ applet.init();
+ applet.start();
+ Dimension ps = applet.getPreferredSize();
+ f.setBounds(-100,-100,99,99);
+ f.setVisible(true);
+ f.setVisible(false);
+ Insets i = f.getInsets();
+ f.setBounds(0,0,
+ ps.width+i.left+i.right,
+ ps.height+i.top+i.bottom);
+ f.setVisible(true);
+ }
+
+ private class gldemo extends GLAnimCanvas
+ implements MouseListener, ActionListener
+ {
+ private PopupMenu menu = null;
+ private boolean menu_showing = false;
+ private boolean save_suspended = false;
+ private final String VIEW_FRONT = "View Front";
+ private final String VIEW_TOP = "View Top";
+ private final String VIEW_BOTTOM = "View Bottom";
+
+ final float M_PI = 3.14159265f;
+ final float M_PI_2 = 1.57079632f;
+ float rotate;
+ float rotationStep = 1;
+ int view = 0; /* 0 = front, 1 = top, 2 = bottom */
+
+ float LightAmbient[] = { 0.75f, 0.75f, 0.75f, 1.5f};
+ float LightDiffuse[] = { 1.0f, 1.0f, 1.0f, 0.9f};
+ float LightSpecular[] = { 0.8f, 0.8f, 0.8f, 1.0f};
+
+ public gldemo(int w, int h)
+ {
+ super(w, h);
+ GLContext.gljNativeDebug = false;
+ GLContext.gljClassDebug = false;
+ setAnimateFps(30.0);
+ }
+
+ public void preInit()
+ {
+ doubleBuffer = true;
+ stereoView = false;
+ }
+
+ public void init()
+ {
+ reshape(getSize().width, getSize().height);
+
+ gl.glEnable(GL_LIGHT0);
+ gl.glLightfv(GL_LIGHT0, GL_AMBIENT, LightAmbient);
+ gl.glLightfv(GL_LIGHT0, GL_DIFFUSE, LightDiffuse);
+ gl.glLightfv(GL_LIGHT0, GL_SPECULAR, LightSpecular);
+
+ glj.gljCheckGL();
+
+ menu = new PopupMenu("Options");
+ menu.add(VIEW_FRONT);
+ menu.add(VIEW_TOP);
+ menu.add(VIEW_BOTTOM);
+ menu.addActionListener(this);
+ add(menu);
+
+ addMouseListener(this);
+ }
+
+ public void doCleanup()
+ {
+ removeMouseListener(this);
+ menu.removeActionListener(this);
+ }
+
+ public void reshape(int width, int height)
+ {
+ gl.glMatrixMode(GL_PROJECTION);
+ gl.glLoadIdentity();
+ glu.gluPerspective(45, (float)width/(float)height, 1, 700);
+ gl.glMatrixMode(GL_MODELVIEW);
+ gl.glLoadIdentity();
+ gl.glViewport(0,0,width,height);
+ }
+
+ public void display()
+ {
+ if (glj.gljMakeCurrent() == false) return;
+
+ gl.glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ gl.glMatrixMode(GL_MODELVIEW);
+ gl.glLoadIdentity();
+
+ gl.glTranslatef(0, 0, -5);
+
+ if(view==1)
+ {
+ gl.glRotatef(90f, 1, 0, 0);
+ } else if(view==2)
+ {
+ gl.glRotatef(-90f, 1, 0, 0);
+ }
+
+ gl.glColor4f(1, 1, 1, 1);
+
+ rotate+=rotationStep;
+ if(rotate>=180.0f || rotate<=0.0f)
+ rotationStep*=-1.0f;
+
+ gl.glRotatef(rotate, 0, 1, 0);
+
+
+ gl.glBegin(GL_POLYGON);
+ gl.glNormal3f( 1, 0, 0);
+
+ // top vertex
+ gl.glColor4f(1, 0, 0, 1); gl.glVertex3f( 0, 1, 0);
+ // bottom left vertex
+ gl.glColor4f(0, 1, 0, 1); gl.glVertex3f(-1, -1, 1);
+ // bottom right vertex
+ gl.glColor4f(0, 0, 1, 1); gl.glVertex3f( 1, -1, 1);
+ gl.glEnd();
+
+ gl.glBegin(GL_POLYGON);
+ gl.glNormal3f( 1, 0, 0);
+
+ // top vertex
+ gl.glColor4f(1, 0, 0, 1); gl.glVertex3f( 0, 1, 0);
+ // bottom left vertex
+ gl.glColor4f(0, 1, 0, 1); gl.glVertex3f( 1, -1, -1);
+ // bottom right vertex
+ gl.glColor4f(0, 0, 1, 1); gl.glVertex3f( 1, -1, 1);
+ gl.glEnd();
+
+ gl.glBegin(GL_POLYGON);
+ gl.glNormal3f( 1, 0, 0);
+
+ // top vertex
+ gl.glColor4f(1, 0, 0, 1); gl.glVertex3f( 0, 1, 0);
+ // bottom left vertex
+ gl.glColor4f(0, 1, 0, 1); gl.glVertex3f( 1, -1, -1);
+ // bottom right vertex
+ gl.glColor4f(0, 0, 1, 1); gl.glVertex3f(-1, -1, -1);
+ gl.glEnd();
+
+ gl.glBegin(GL_POLYGON);
+ gl.glNormal3f( 1, 0, 0);
+
+ // top vertex
+ gl.glColor4f(1, 0, 0, 1); gl.glVertex3f( 0, 1, 0);
+ // bottom left vertex
+ gl.glColor4f(0, 1, 0, 1); gl.glVertex3f(-1, -1, 1);
+ // bottom right vertex
+ gl.glColor4f(0, 0, 1, 1); gl.glVertex3f(-1, -1, -1);
+ gl.glEnd();
+
+
+ // bottom square polygon
+ gl.glBegin(GL_POLYGON);
+ gl.glNormal3f( 1, 0, 0);
+
+ gl.glColor4f(0, 0, 1, 1); gl.glVertex3f( 1, -1, 1);
+ gl.glColor4f(0, 1, 0, 1); gl.glVertex3f(-1, -1, 1);
+ gl.glColor4f(0, 0, 1, 1); gl.glVertex3f(-1, -1, -1);
+ gl.glColor4f(0, 1, 0, 1); gl.glVertex3f( 1, -1, -1);
+ gl.glEnd();
+
+
+ glj.gljSwap();
+ glj.gljCheckGL();
+ glj.gljFree();
+ }
+
+ // Methods required for the implementation of MouseListener
+ public void mouseEntered(MouseEvent evt)
+ {
+ }
+
+ public void mouseExited(MouseEvent evt)
+ {
+ }
+
+ public void mousePressed(MouseEvent evt)
+ {
+ if (!menu_showing)
+ {
+ if ((evt.getModifiers() & evt.BUTTON3_MASK) != 0)
+ {
+ menu_showing = true;
+ save_suspended = isSuspended();
+ if (!save_suspended)
+ {
+ setSuspended(true);
+ repaint(100);
+ try
+ {
+ Thread.currentThread().sleep(200);
+ }
+ catch (Exception e)
+ { }
+ }
+ menu.show(this,evt.getX(),evt.getY());
+ }
+ else
+ {
+ // Must be left button.
+ if (isSuspended()) repaint();
+ }
+ }
+ else
+ {
+ menu_showing = false;
+ setSuspended(save_suspended);
+ }
+ }
+
+ public void mouseReleased(MouseEvent evt)
+ {
+ }
+
+ public void mouseClicked(MouseEvent evt)
+ {
+ }
+
+ // Method required for the implementation of ActionListener
+ public void actionPerformed(ActionEvent evt)
+ {
+ String c = evt.getActionCommand();
+ if (c.equals(VIEW_FRONT))
+ {
+ view=0;
+ }
+ else if (c.equals(VIEW_TOP))
+ {
+ view=1;
+ }
+ else if (c.equals(VIEW_BOTTOM))
+ {
+ view=2;
+ }
+ if (menu_showing)
+ {
+ menu_showing = false;
+ setSuspended(save_suspended);
+ }
+ }
+
+
+
+ }
+}