0
CARL      VONOSSIETZKY            Einf¨hrung in JOGL 2.0                u            Johannes Diemke            ¨         ...
Einf¨hrung    uOpenGL   Open Graphics Library   Spezifikation f¨r ein plattformunabh¨ngiges API f¨r 2D- und                ...
Einf¨hrung    uJava Bindings for OpenGL   Erm¨glichen Java Programmen die Nutzung der OpenGL API      o         Wrapperkla...
Einf¨hrung    uWarum JOGL 2.0?   JOGL 1.1.1 wurde nur bis OpenGL 2.1 entwickelt   Ab OpenGL 3.1 ist ein Großteil der als d...
Einf¨hrung    uInstallation von JOGL 2.0 1   JOGL 2.0 setzt eine vorhandene Installation des JDK voraus           http://j...
Einf¨hrung    uInstallation von JOGL 2.0 (Forts.) 4   Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0           E...
Einf¨hrung    uInstallation von JOGL 2.0 (Forts.) 4   Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0           E...
Einf¨hrung    uInstallation von JOGL 2.0 (Forts.) 4   Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0           H...
Einf¨hrung    uInstallation von JOGL 2.0 (Forts.) 4   Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0           S...
Einf¨hrung    uInstallation von JOGL 2.0 (Forts.) 4   Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0           H...
Einf¨hrung    uInstallation von JOGL 2.0 (Forts.) 4   Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0           H...
Einf¨hrung    uErstellung einer einfachen JOGL 2.0 Applikation   Ziel ist eine Applikation, die ein Fenster ¨ffnet in welch...
Einf¨hrung    uSchritt 1: Wahl eines GLProfile   JOGL 2.0 unterst¨tzt verschiedene OpenGL Profile                   u   Vor ...
Einf¨hrung    uSchritt 1: Wahl eines GLProfile (Forts.)   OpenGL 1.x bis zu 3.0   GLProfile glp = GLProfile.get(GLProfile.G...
Einf¨hrung    uEinschub: GLContext     Anschaulich: Beschreibt Eigenschaften einer OpenGL Zeichenfl¨che                    ...
Einf¨hrung    uSchritt 3: Erstellen eines GLCanvas     Ein GLCanvas ist eine mit AWT kompatible OpenGL Zeichenfl¨che       ...
Einf¨hrung    uSchritt 4: Implementieren des GLEventListener   Damit in ein GLDrawable gerendert werden kann, muss das   G...
Einf¨hrung    uSchritt 4: Implementieren des GLEventListener (Forts.)       Die init-Methode wird nach der Erzeugung des G...
Einf¨hrung    uSchritt 4: Implementieren des GLEventListener (Forts.)       Die display-Methode wird von dem GLDrawable au...
Einf¨hrung    uSchritt 4: Implementieren des GLEventListener (Forts.)       Die reshape-Methode wird von dem GLDrawable na...
Einf¨hrung    uSchritt 4: Implementieren des GLEventListener (Forts.)     Die dispose-Methode wird von dem GLDrawable vor ...
Einf¨hrung    uSchritt 5: Hinzuf¨gen des GLCanvas zu einem AWT Frame                 upublic static void main(String[] arg...
Einf¨hrung    uSchritt 6: Erstellen eines Animator-Threads      Die display-Methode des GLDrawable wird standardm¨ßig     ...
Einf¨hrung    uSchritt 6: Erstellen eines Animator-Threads (Forts.)     Animator.stop() ist blockierend und kann im AWT Th...
Einf¨hrung    uDas Ergebnis   Johannes Diemke   OpenGL mit Java   WiSe 2010 / 2011   25/26
Literatur Dave Shreiner OpenGL Programming Guide http://www.opengl-redbook.com/ Richard S. Wright, Benjamin Lipchak und Ni...
Upcoming SlideShare
Loading in...5
×

2010-JOGL-02-Einfuehrung

293

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
293
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "2010-JOGL-02-Einfuehrung"

  1. 1. CARL VONOSSIETZKY Einf¨hrung in JOGL 2.0 u Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
  2. 2. Einf¨hrung uOpenGL Open Graphics Library Spezifikation f¨r ein plattformunabh¨ngiges API f¨r 2D- und u a u 3D-Computergrafik Ist als Zustandsautomat entworfen Dient als Schnittstelle zwischen Benutzer und Grafikkarte Im professionellen Bereich als 3D-Standard f¨hrend u Aktuelle Version: 4.1 (26. Juli 2010) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/26
  3. 3. Einf¨hrung uJava Bindings for OpenGL Erm¨glichen Java Programmen die Nutzung der OpenGL API o Wrapperklassen stellen die Schnittstelle bereit Nutzten das Java Native Interface Der Grafikcode gleicht dem von C/C++ OpenGL Programmen Einfache Portierung bestehender OpenGL Programme JOGL lernen ist im Wesentlichen OpenGL lernen Er¨ffnet neue Einsatzgebiete f¨r Java o u Computerspiele, VR, CAD, Simulationen, . . .Versionen Stable Release: JOGL 1.1.1 (22. Mai 2008) Preview Release: JOGL 2.0 PRE 20101001 (30. Sept. 2010) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/26
  4. 4. Einf¨hrung uWarum JOGL 2.0? JOGL 1.1.1 wurde nur bis OpenGL 2.1 entwickelt Ab OpenGL 3.1 ist ein Großteil der als deprecated eingestuften Funktionalit¨t der fixed function pipeline aus der API entfernt a Mit JOGL 2.0 wurden daher Profile als Abstraktion der verschiedenen OpenGL Versionen eingef¨hrt u Weiterhin wurde eine geringf¨gige Refaktorierung der API u durchgef¨hrt u Programme die OpenGL > 2.1 verwenden wollen ben¨tigen daher o JOGL 2.0 Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/26
  5. 5. Einf¨hrung uInstallation von JOGL 2.0 1 JOGL 2.0 setzt eine vorhandene Installation des JDK voraus http://java.sun.com/ 2 Um JOGL 2.0 verwenden zu k¨nnen, m¨ssen die ben¨tigten o u o Bibliotheken von JogAmp bezogen werden http://jogamp.com/ 3 Als n¨chstes muss das Archiv mit den Bibliotheken in ein beliebiges a Verzeichnis entpackt werden Bspw. /home/trigger/lib/jogl-2.0-pre-20101001-linux-i586 Im Unterverzeichnis ./lib befinden sich die JOGL 2.0 JAR Dateien sowie dazugeh¨rige native Bibliotheken o Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/26
  6. 6. Einf¨hrung uInstallation von JOGL 2.0 (Forts.) 4 Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0 Erstellen der User Library jogl-2.0 f¨r die JOGL Bibliothek u Window Preferences Java Build Path User Libraries New. . . Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/26
  7. 7. Einf¨hrung uInstallation von JOGL 2.0 (Forts.) 4 Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0 Erstellen der User Library jogl-2.0 f¨r die JOGL Bibliothek u Window Preferences Java Build Path User Libraries New. . . Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/26
  8. 8. Einf¨hrung uInstallation von JOGL 2.0 (Forts.) 4 Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0 Hinzuf¨gen der JOGL 2.0 JARs u jogl.all.jar, gluegen-rt.jar, nativewindow.all.jar, newt.all.jar Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/26
  9. 9. Einf¨hrung uInstallation von JOGL 2.0 (Forts.) 4 Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0 Setzen der Native library location der hinzugef¨gten JARs u Native library location Edit. . . External Folder. . . Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/26
  10. 10. Einf¨hrung uInstallation von JOGL 2.0 (Forts.) 4 Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0 Hinzuf¨gen der jogl-2.0 User Library zu einem bestehenden Projekt u Properties Java Build Path Libraries Add Library. . . User Library Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/26
  11. 11. Einf¨hrung uInstallation von JOGL 2.0 (Forts.) 4 Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0 Hinzuf¨gen der jogl-2.0 User Library zu einem bestehenden Projekt u Properties Java Build Path Libraries Add Library. . . User Library Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 11/26
  12. 12. Einf¨hrung uErstellung einer einfachen JOGL 2.0 Applikation Ziel ist eine Applikation, die ein Fenster ¨ffnet in welches gerendert o werden kann Alternative M¨glichkeiten OpenGL Zeichenfl¨chen zu erzeugen o a GLCanvas (AWT) GLJPanel (Swing) GLWindow (NEWT API, Bestandteil von JOGL 2.0) Vorgehen bei Verwendung des AWT 1 Wahl eines GLProfile 2 Konfiguration der GLCapabilities 3 Erstellen eines GLCanvas 4 Implementieren des GLEventListener 5 Hinzuf¨gen des GLCanvas zu einem AWT Frame u 6 Erstellen eines Animator-Threads Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/26
  13. 13. Einf¨hrung uSchritt 1: Wahl eines GLProfile JOGL 2.0 unterst¨tzt verschiedene OpenGL Profile u Vor der Entwicklung einer JOGL 2.0 Applikation muss zun¨chst ein a GLProfile gew¨hlt werden a Aktuell unterst¨tzte Profile: u GL4bc (4.x, mit x ≥ 0, d. h. GL2 plus GL4) GL4 (4.x, mit x ≥ 0) GL3bc (3.x, mit x ≥ 1, d. h. GL2 plus GL3) GL3 (3.x, mit x ≥ 1) GL2 (1.x bis zu 3.0) GLES1 (ES 1.x, mit x ≥ 0) GLES2 (ES 2.x, mit x ≥ 0) GL2ES1 (GL2 ∩ ES1) GL2ES2 (GL3 ∩ GL2 ∩ ES2) GL2GL3 (GL3 ∩ GL2) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 13/26
  14. 14. Einf¨hrung uSchritt 1: Wahl eines GLProfile (Forts.) OpenGL 1.x bis zu 3.0 GLProfile glp = GLProfile.get(GLProfile.GL2); Die statische Methode initSingleton der Klasse GLProfile muss zwingend vor allen anderen Methodenaufrufen aufgerufen werden public class JOGL2Basecode { public static void main(String[] args) { // It is mandatory to call this methods ASAP, before // anything else. GLProfile.initSingleton(); GLProfile glp = GLProfile.get(GLProfile.GL2); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 14/26
  15. 15. Einf¨hrung uEinschub: GLContext Anschaulich: Beschreibt Eigenschaften einer OpenGL Zeichenfl¨che a OpenGL Version Farbformat, OpenGL Zustand, . . .Schritt 2: Konfiguration der GLCapabilities Ein GLCapabilities Objekt beschreibt die gew¨nschten F¨higkeiten u a eines GLContextpublic class JOGL2Basecode { public static void main(String[] args) { GLProfile.initSingleton(); GLProfile glp = GLProfile.getDefault(); // configure context GLCapabilities caps = new GLCapabilities(glp); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 15/26
  16. 16. Einf¨hrung uSchritt 3: Erstellen eines GLCanvas Ein GLCanvas ist eine mit AWT kompatible OpenGL Zeichenfl¨che a Erstellt und verwaltet selbstst¨ndig seinen GLContext a Implementiert das GLDrawable Interfacepublic class JOGL2Basecode { public static void main(String[] args) { GLProfile.initSingleton(); GLProfile glp = GLProfile.getDefault(); // configure context GLCapabilities caps = new GLCapabilities(glp); // a canvas based on your OpenGL capabilities GLCanvas canvas = new GLCanvas(caps); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 16/26
  17. 17. Einf¨hrung uSchritt 4: Implementieren des GLEventListener Damit in ein GLDrawable gerendert werden kann, muss das GLEventListener Interface implementiert und angemeldet werden Daraufhin ist es m¨glich auf Rendering-Events des GLDrawable zu o reagieren public class JOGL2Basecode implements GLEventListener { public static void main(String[] args) { GLProfile.initSingleton(); GLProfile glp = GLProfile.getDefault(); GLCapabilities caps = new GLCapabilities(glp); GLCanvas canvas = new GLCanvas(caps); canvas.addGLEventListener(new JOGL2Basecode()); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 17/26
  18. 18. Einf¨hrung uSchritt 4: Implementieren des GLEventListener (Forts.) Die init-Methode wird nach der Erzeugung des GLContext aufgerufen Passiert bspw. wenn ein GLCanvas erstellt wird Wird daher h¨ufig zur Initialisierung von OpenGL genutzt a Lichter ShadeModel ...public void init(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); // synchronize with the refresh rate of the display (v-sync) gl.setSwapInterval(1); gl.glClearColor(0.3f, 0.3f, 0.3f, 1.0f); gl.glShadeModel(GL2.GL_SMOOTH); gl.glEnable(GL2.GL_DEPTH_TEST);} Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 18/26
  19. 19. Einf¨hrung uSchritt 4: Implementieren des GLEventListener (Forts.) Die display-Methode wird von dem GLDrawable aufgerufen, wenn ein Neuzeichen notwendig wirdpublic void display(GLAutoDrawable drawable) { GL2 gl = drawable.getGL().getGL2(); gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); gl.glLoadIdentity(); gl.glTranslatef(0.0f, 0.0f, -10.0f); gl.glColor3f(0.65f, 0.85f, 0.65f); gl.glBegin(GL2.GL_QUADS); gl.glVertex3f(-1.0f, -1.0f, 2.0f); gl.glVertex3f(1.0f, -1.0f, 0.0f); gl.glVertex3f(1.0f, 1.0f, 0.0f); gl.glVertex3f(-1.0f, 1.0f, 2.0f); gl.glEnd();} Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 19/26
  20. 20. Einf¨hrung uSchritt 4: Implementieren des GLEventListener (Forts.) Die reshape-Methode wird von dem GLDrawable nach einem Resize-Event aufgerufenpublic void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { GL2 gl = drawable.getGL().getGL2(); GLU glu = new GLU(); if (height == 0) { height = 1; } float aspect = (float) width / (float) height; gl.glMatrixMode(GL2.GL_PROJECTION); gl.glLoadIdentity(); glu.gluPerspective(45.0f, aspect, 0.1f, 100.0f); gl.glMatrixMode(GL2.GL_MODELVIEW); gl.glLoadIdentity();} Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 20/26
  21. 21. Einf¨hrung uSchritt 4: Implementieren des GLEventListener (Forts.) Die dispose-Methode wird von dem GLDrawable vor dem Zerst¨ren o des GLContext aufgerufen Hier sollen eigentlich OpenGL Ressourcen destruiert werden Texturen Shader Programme ... Benutzt aber niemandpublic void dispose(GLAutoDrawable drawable) {} Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 21/26
  22. 22. Einf¨hrung uSchritt 5: Hinzuf¨gen des GLCanvas zu einem AWT Frame upublic static void main(String[] args) { GLProfile.initSingleton(); GLProfile glp = GLProfile.get(GLProfile.GL2); GLCapabilities caps = new GLCapabilities(glp); GLCanvas canvas = new GLCanvas(caps); canvas.addGLEventListener(new JOGL2Basecode()); Frame frame = new Frame("JOGL2Basecode"); frame.add(canvas); frame.setSize(640, 480); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setVisible(true);} Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 22/26
  23. 23. Einf¨hrung uSchritt 6: Erstellen eines Animator-Threads Die display-Methode des GLDrawable wird standardm¨ßig a aufgerufen wenn: Resize-Events auftreten Bedeckte Bereiche des Frames wieder sichtbar werden Um die display-Methode wiederholt aufzurufen ist ein Animator-Thread notwendigFrame frame = new Frame("JOGL2Basecode");frame.add(canvas);frame.setSize(640, 480);final Animator animator = new Animator(canvas);...frame.setVisible(true);animator.start(); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 23/26
  24. 24. Einf¨hrung uSchritt 6: Erstellen eines Animator-Threads (Forts.) Animator.stop() ist blockierend und kann im AWT Thread zu Deadlocks f¨hren u Daher sollte der Aufruf einem eigenen Thread ausgef¨hrt werden uframe.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { new Thread(new Runnable() { public void run() { animator.stop(); System.exit(0); } }).start(); }});frame.setVisible(true);animator.start(); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 24/26
  25. 25. Einf¨hrung uDas Ergebnis Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26
  26. 26. Literatur Dave Shreiner OpenGL Programming Guide http://www.opengl-redbook.com/ Richard S. Wright, Benjamin Lipchak und Nicholas Haemel OpenGL SuperBibel http://www.starstonesoftware.com/OpenGL/ Randi J. Rost OpenGL Shading Language http://www.3dshaders.com/ Tomas Akenine-M¨ller, Eric Haines und Naty Hoffman o Real-Time Rendering http://www.realtimerendering.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 26/26
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×