Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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...
Nächste SlideShare
Wird geladen in …5
×

2010-JOGL-02-Einfuehrung

576 Aufrufe

Veröffentlicht am

  • Als Erste(r) kommentieren

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

×