Java Standard: OpenGL
Einleitung
[Bearbeiten]Grundlegendes
[Bearbeiten]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
[Bearbeiten]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
[Bearbeiten]Entpacken der plattformabhängigen Datei, z.B.: unzip jogl-x.y.z-linux-i586.zip
Einbinden
[Bearbeiten]Um diese Bibliotheken nun in das Java-System einzubinden gibt es mehrere Möglichkeiten. Prinzipiell gilt:
- Die Dateien
jogl.jar
undgluegen-rt.jar
müssen in denCLASSPATH
eingebunden werden. - Die nativen Bibliotheksdateien (
libjogl_cg.so
,libjogl.so
,libjogl_awt.so
) müssen imjava.library.path
gefunden 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
[Bearbeiten]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
[Bearbeiten]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
[Bearbeiten]