Einleitung
Grundlegendes
JOGL wird nicht mit den offiziellen Java SDK- oder JRE-Releases ausgeliefert. Aus diesem Grund muss JOGL manuell ins Java-System eingebunden werden.
Download der Jogl-Bibliothek
Auf der JOGL-Website finden sich für verschiedene Betriebssysteme und Prozessoren vorkompilierte jogl-Bibliotheken. Zusätzlich stehen dort auch die API-Manuals, sowie die Quellcode-Dateien zum Download bereit.
Entpacken
Entpacken der plattformabhängigen Datei, z.B.: unzip jogl-x.y.z-linux-i586.zip
Einbinden
Um diese Bibliotheken nun in das Java-System einzubinden gibt es mehrere Möglichkeiten. Prinzipiell gilt:
- Die Dateien
jogl.jarundgluegen-rt.jarmüssen in denCLASSPATHeingebunden werden. - Die nativen Bibliotheksdateien (
libjogl_cg.so,libjogl.so,libjogl_awt.so) müssen imjava.library.pathgefunden werden, sonst hagelt es bei der Programmausführung nur Laufzeitfehler.
Wie sie das bewerkstelligen, bleibt ihnen überlassen. In manchen Tutorials wird empfohlen, die Dateien in die entsprechenden Java-Unterverzeichnisse zu kopieren. Davon wird aber im aktuellen Jogl-User's Guide dringend abgeraten. Nachfolgend wird eine Kommandozeilen-Variante gezeigt:
- Die JOGL-Bibliotheksdateien werden in das Projektverzeichnis kopiert.
- Kompilierung im Projektverzeichnis:
javac -classpath jogl.jar:gluegen-rt.jar JoglTest.java - Programmstart im Projektverzeichnis:
java -classpath jogl.jar:gluegen-rt.jar: -Djava.library.path=. JoglTest
Die nachfolgenden Beispiele basieren auf dem JOGL-Release-Candidate 1.1.0-rc3. Frühere JOGL-Versionen wiesen u.a. eine andere Packagestruktur auf.
Ein simples Programmbeispiel
import javax.swing.*;
import javax.media.opengl.*;
public class JoglTest extends JFrame
{
GLCanvas canvas;
public JoglTest()
{
GLCapabilities cap = new GLCapabilities();
//frueher: canvas = GLDrawableFactory.getFactory().createGLCanvas(cap);
//jetzt:
canvas = new GLCanvas(cap);
canvas.addGLEventListener(new SceneView());
getContentPane().add(canvas);
setTitle("Simples Jogl-Beispiel");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(300,200);
setVisible(true);
}
class SceneView implements GLEventListener
{
public void init(GLAutoDrawable arg0)
{
GL gl = arg0.getGL();
gl.glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glOrtho(-100, 100, -100, 100, -100, 100);
gl.glMatrixMode(GL.GL_MODELVIEW);
}
public void display(GLAutoDrawable arg0)
{
GL gl = arg0.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glColor3f(1.0f, 0.0f, 0.0f);
gl.glRectf(-50.0f, -50.0f, 50.0f, 50.0f);
}
public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4)
{
}
public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2)
{
}
}
public static void main(String args[])
{
new JoglTest();
}
}

Ein einfaches 3D-Beispiel
import javax.swing.*;
import javax.media.opengl.*;
import com.sun.opengl.util.GLUT;
public class JoglTest extends JFrame
{
GLCanvas canvas;
public JoglTest()
{
GLCapabilities cap = new GLCapabilities();
canvas = new GLCanvas(cap);
canvas.addGLEventListener(new SceneView());
getContentPane().add(canvas);
setTitle("Simples Jogl-Beispiel");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(400, 400);
setVisible(true);
}
class SceneView implements GLEventListener
{
public void init(GLAutoDrawable arg0)
{
GL gl = arg0.getGL();
float l_position[] = {100.0f, 100.0f, 200.0f, 1.0f};
gl.glEnable(GL.GL_LIGHTING);
gl.glEnable(GL.GL_LIGHT0);
gl.glEnable(GL.GL_COLOR_MATERIAL);
gl.glEnable(GL.GL_DEPTH_TEST);
gl.glEnable(GL.GL_NORMALIZE);
gl.glEnable(GL.GL_POLYGON_SMOOTH);
gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, l_position, 0);
gl.glClearColor(0.7f, 0.7f, 0.7f, 0.0f);
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glOrtho(-100, 100, -100, 100, -100, 100);
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glRotatef(35.0f, 1.0f, 0.0f, 0.0f); // Rotation um die x-Achse
gl.glRotatef(-25.0f, 0.0f, 1.0f, 0.0f); // Rotation um die y-Achse
}
public void display(GLAutoDrawable arg0)
{
GL gl = arg0.getGL();
GLUT glut = new GLUT();
gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
gl.glColor3f(0.2f, 1.0f, 0.3f);
glut.glutSolidTeapot( 50.0 ) ;
}
public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4)
{
}
public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2)
{
}
}
public static void main(String args[])
{
new JoglTest();
}
}

Weitere OpenGL-Bindings für Java