Computer graphics/2013-2014/JOGL-Template
Appearance
Quick links: front; laboratories agenda, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, JOGL template.
Complete example
[edit | edit source]Two example templates are given here. One for scenes using an orthographic projection and one for scenes using a perspective projection. These examples are intended to be used as templates for future JOGL based applications.
Orthographic projection example
[edit | edit source]import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.fixedfunc.GLMatrixFunc;
import javax.swing.JFrame;
import com.jogamp.opengl.util.Animator;
public class MainFrame
extends JFrame
implements GLEventListener
{
private GLCanvas canvas;
private Animator animator;
// For specifying the positions of the clipping planes (increase/decrease the distance) modify this variable.
// It is used by the glOrtho method.
private double v_size = 1.0;
// Application main entry point
public static void main(String args[])
{
new MainFrame();
}
// Default constructor
public MainFrame()
{
super("Java OpenGL");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800, 600);
this.initializeJogl();
this.setVisible(true);
}
private void initializeJogl()
{
// Creating a new GL profile.
GLProfile glprofile = GLProfile.getDefault();
// Creating an object to manipulate OpenGL parameters.
GLCapabilities capabilities = new GLCapabilities(glprofile);
// Setting some OpenGL parameters.
capabilities.setHardwareAccelerated(true);
capabilities.setDoubleBuffered(true);
// Try to enable 2x anti aliasing. It should be supported on most hardware.
capabilities.setNumSamples(2);
capabilities.setSampleBuffers(true);
// Creating an OpenGL display widget -- canvas.
this.canvas = new GLCanvas(capabilities);
// Adding the canvas in the center of the frame.
this.getContentPane().add(this.canvas);
// Adding an OpenGL event listener to the canvas.
this.canvas.addGLEventListener(this);
// Creating an animator that will redraw the scene 40 times per second.
this.animator = new Animator(this.canvas);
// Starting the animator.
this.animator.start();
}
public void init(GLAutoDrawable canvas)
{
// Obtaining the GL instance associated with the canvas.
GL2 gl = canvas.getGL().getGL2();
// Setting the clear color -- the color which will be used to erase the canvas.
gl.glClearColor(0, 0, 0, 0);
// Selecting the modelview matrix.
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
}
public void display(GLAutoDrawable canvas)
{
GL2 gl = canvas.getGL().getGL2();
// Erasing the canvas -- filling it with the clear color.
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
// Add your scene code here
// Forcing the scene to be rendered.
gl.glFlush();
}
public void reshape(GLAutoDrawable canvas, int left, int top, int width, int height)
{
GL2 gl = canvas.getGL().getGL2();
// Selecting the viewport -- the display area -- to be the entire widget.
gl.glViewport(0, 0, width, height);
// Determining the width to height ratio of the widget.
double ratio = (double) width / (double) height;
// Selecting the projection matrix.
gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
gl.glLoadIdentity();
// Selecting the view volume to be x from 0 to 1, y from 0 to 1, z from -1 to 1.
// But we are careful to keep the aspect ratio and enlarging the width or the height.
if (ratio < 1)
gl.glOrtho(-v_size, v_size, -v_size, v_size / ratio, -1, 1);
else
gl.glOrtho(-v_size, v_size * ratio, -v_size, v_size, -1, 1);
// Selecting the modelview matrix.
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
}
public void displayChanged(GLAutoDrawable canvas, boolean modeChanged, boolean deviceChanged)
{
return;
}
@Override
public void dispose(GLAutoDrawable arg0) {
// TODO Auto-generated method stub
}
}
Perspective projection example
[edit | edit source]import javax.media.opengl.GL;
import javax.media.opengl.GL2;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCapabilities;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.GLProfile;
import javax.media.opengl.awt.GLCanvas;
import javax.media.opengl.fixedfunc.GLMatrixFunc;
import javax.media.opengl.glu.GLU;
import javax.swing.JFrame;
import com.jogamp.opengl.util.Animator;
public class MainFrame
extends JFrame
implements GLEventListener
{
private GLCanvas canvas;
private Animator animator;
private GLU glu;
// Application main entry point
public static void main(String args[])
{
new MainFrame();
}
// Default constructor;
public MainFrame()
{
super("Java OpenGL");
// Registering a window event listener to handle the closing event.
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(800, 600);
this.initializeJogl();
this.setVisible(true);
}
private void initializeJogl()
{
// Creating a new GL profile.
GLProfile glprofile = GLProfile.getDefault();
// Creating an object to manipulate OpenGL parameters.
GLCapabilities capabilities = new GLCapabilities(glprofile);
// Setting some OpenGL parameters.
capabilities.setHardwareAccelerated(true);
capabilities.setDoubleBuffered(true);
// Try to enable 2x anti aliasing. It should be supported on most hardware.
capabilities.setNumSamples(2);
capabilities.setSampleBuffers(true);
// Creating an OpenGL display widget -- canvas.
this.canvas = new GLCanvas(capabilities);
// Adding the canvas in the center of the frame.
this.getContentPane().add(this.canvas);
// Adding an OpenGL event listener to the canvas.
this.canvas.addGLEventListener(this);
// Creating an animator that will redraw the scene 40 times per second.
this.animator = new Animator(this.canvas);
// Registering the canvas to the animator.
this.animator.add(this.canvas);
// Starting the animator.
this.animator.start();
}
public void init(GLAutoDrawable canvas)
{
// Obtaining the GL instance associated with the canvas.
GL2 gl = canvas.getGL().getGL2();
// Initialize GLU. We'll need it for perspective and camera setup.
this.glu = GLU.createGLU();
// Setting the clear color -- the color which will be used to erase the canvas.
gl.glClearColor(0, 0, 0, 0);
// Selecting the modelview matrix.
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
}
public void display(GLAutoDrawable canvas)
{
GL2 gl = canvas.getGL().getGL2();
// Erasing the canvas -- filling it with the clear color.
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glLoadIdentity();
// Add your scene code here
// Forcing the scene to be rendered.
gl.glFlush();
}
public void reshape(GLAutoDrawable canvas, int left, int top, int width, int height)
{
GL2 gl = canvas.getGL().getGL2();
// Selecting the viewport -- the display area -- to be the entire widget.
gl.glViewport(0, 0, width, height);
// Determining the width to height ratio of the widget.
double ratio = (double) width / (double) height;
// Selecting the projection matrix.
gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective (38, ratio, 0.1, 100);
// Selecting the modelview matrix.
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
}
public void displayChanged(GLAutoDrawable canvas, boolean modeChanged, boolean deviceChanged)
{
return;
}
@Override
public void dispose(GLAutoDrawable arg0) {
// TODO Auto-generated method stub
}
}