<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/**
 *  CS 467. Cornell University.
 */

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import net.java.games.jogl.*;
import net.java.games.jogl.util.GLUT;

public class OpenGLDemo05 extends JFrame implements GLEventListener, ActionListener {
  public static final int VIEWPORT_WIDTH = 512;
  public static final int VIEWPORT_HEIGHT = 512;
  public static final int REDRAW_PERIOD = 10;

  public static float lightPosition[] = {5.0f, 8.0f, 15.0f, 1.0f};
  public static float lightColor[] = {1.0f, 1.0f, 1.0f};
  public static float materialColor[] = {1.0f, 1.0f, 0.0f};

  protected Timer drawTimer;

  protected GLCanvas canvas;
  GLUT glut = new GLUT();

  public OpenGLDemo05() {
    super("OpenGL Demo 05");
    setLocation(100, 100);
    setSize(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);

    canvas = GLDrawableFactory.getFactory().createGLCanvas(new GLCapabilities());
    canvas.addGLEventListener(this);

    JPanel glPanel = new JPanel(new BorderLayout());
    glPanel.add(canvas, BorderLayout.CENTER);
    glPanel.setSize(VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
    getContentPane().add(glPanel);

    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    show();

    drawTimer = new Timer(REDRAW_PERIOD, this);
    drawTimer.start();
  }

  public void display(GLDrawable glDrawable) {
    final GL gl = glDrawable.getGL();
    final GLU glu = glDrawable.getGLU();

    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);

    gl.glRotatef(2, 0, 1, 0);
    glut.glutSolidDodecahedron(gl);

  }

  public void displayChanged(GLDrawable gLDrawable, boolean modeChanged,
                             boolean deviceChanged) {
  }

  public void reshape(GLDrawable gLDrawable, int x, int y, int width,
                      int height) {
    final GL gl = gLDrawable.getGL();
    final GLU glu = gLDrawable.getGLU();

    gl.glViewport(0, 0, width, height);
    gl.glMatrixMode(gl.GL_PROJECTION);
    gl.glLoadIdentity();
    glu.gluPerspective(45.0f, (float) width / (float) height, 0.2f, 100.0f);
    glu.gluLookAt(3.0f, 3.0f, 7.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);
    gl.glMatrixMode(gl.GL_MODELVIEW);
    gl.glLoadIdentity();
  }

  public void init(GLDrawable gLDrawable) {
    final GL gl = gLDrawable.getGL();

    gl.glEnable(gl.GL_DEPTH_TEST);

    gl.glLightfv(gl.GL_LIGHT0, gl.GL_DIFFUSE, lightColor);
    gl.glLightfv(gl.GL_LIGHT0, gl.GL_POSITION, lightPosition);

    gl.glMaterialfv(gl.GL_FRONT, gl.GL_DIFFUSE, materialColor);

    gl.glEnable(gl.GL_LIGHTING);
    gl.glEnable(gl.GL_LIGHT0);
  }

  public void actionPerformed(ActionEvent e) {
    canvas.repaint();
  }

  public static void main(String[] args) {
    new OpenGLDemo05();
  }
}
</pre></body></html>