Einführung in JOGL 2.0

Ähnliche Dokumente
C A R L V O N O S S I E T Z K Y. Wavefront OBJ Format. Johannes Diemke. Übung im Modul OpenGL mit Java Wintersemester 2010/2011

C A R L V O N O S S I E T Z K Y. Licht & Material. Johannes Diemke. Übung im Modul OpenGL mit Java Wintersemester 2010/2011

Praktikum: Spieleengine im Eigenbau

Abteilung Informatik, JFC/Swing 2004 Diego Schmidlin V2.2

Eclipse 3.0 (Windows)

Handbuch für die Erweiterbarkeit

Objektorientierte Software-Entwicklung

GUI Programmierung mit JAVA Swing

JOGL - Java Binding for the OpenGL API

Graphische Benutzungsoberflächen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12. Kapitel 7. Grafische Benutzeroberflächen

Computergrafik 1 Übung, Wintersemester Eclipse Hands-On. C++ Projektsetup mit OpenGL und GLUT unter Eclipse für Windows

Interaktive Elemente, GUI-Programmierung

Konstruktoren, Packages und Scopes

GUI Programmierung in Java

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik GUI-Programmierung mit Swing

Programmieren in Java

Übung: Verwendung von Java-Threads

Java Einführung Abstrakte Klassen und Interfaces

Benutzeroberflächen. Java Teil 4

Einstieg in die Informatik mit Java

Java I Vorlesung 11 Graphische Oberflächen mit Swing

Systematisches Testen

Graphische Benutzungsoberflächen mit Java. Einführung in NetBeans

Mobile und Verteilte Datenbanken

Java Kurzreferenz Für Fortgeschrittene

Einstieg in die Entwicklung von Augmented Reality Anwendungen mit Hilfe des jar-frameworks

SWT. -The Standard Widget Toolkit- Inhaltsverzeichnis. Thomas Wilhelm SWT. 1. Was ist SWT?

Session 1: Classes and Applets

Anleitung. Ein einfaches RMI-Beispiel. (ab Java 5.0) c Y. Pfeifer. (Juni 2014)

Java-Schulung Grundlagen

Grundlagen der Programmierung APPLETS

Programmentwicklung ohne BlueJ

Theorie zu Übung 8 Implementierung in Java

Aufgabenblatt Nr. 5 Generizität und TicTacToe

How To: Wie entwickle ich mit SharpDevelop Anwendungen für die PocketPC-Platform

Grafikausgabe mit dem Abstract- Windowing-Toolkit. Eine Einführung

JDroidLib mit Eclipse (Mac/Linux/Windows)

Synchronisation in Java. Invisible Web

Einführung in die Programmierung 1

Prinzipien Objektorientierter Programmierung

Betriebssysteme. Wintersemester Kapitel 2 Prozess und Threads. Patrick Kendzo ppkendzo@gmail.com

Python SVN-Revision 12

Die OSGi Service Plattform

Java Game Development Fabian Birzele Programmierpraktikum 2008 / 2009

Apps-Entwicklung mit Eclipse

Schritt 4: Hallo Enterprise Bean

Algorithmen und Datenstrukturen

Einstieg in die Informatik mit Java

Java Database Connectivity (JDBC) Walther Rathenau Gewerbeschule 1

Vorlesung Informatik II

eclipse und Komponenten

2.2 Prozesse in Java

Eclipse Tutorial.doc

Mobile und Verteilte Datenbanken

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

Universität Augsburg, Institut für Informatik Sommersemester 2003 Prof. Dr. Bernhard Bauer 18. Oktober 2003 Stefan Fischer, Dr.

Programmieren I. Dokumentation mit Javadoc Heusch 10.4 Ratz Institut für Angewandte Informatik

Installation von LeJOS für NXT und Einrichtung von Eclipse

Willkommen zur Vorlesung. Objektorientierte Programmierung Vertiefung - Java

Connecting Android. Externe Hardware mit dem grünen Roboter verbinden. Alexander Dahmen Dominik Helleberg

NTB Druckdatum:

Kapitel 6. Vererbung

Erstellen von speziellen Ereignissen in C#

Java Einführung Umsetzung von Beziehungen zwischen Klassen. Kapitel 7

Probeklausur: Programmierung WS04/05

Testen von grafischen Benutzeroberflächen

Tutorial Spieleentwicklung mit OpenGL und Java. oder. JOGLn in Java. Prof. Dr. W. P. Kowalk Universität Oldenburg

Ant in Eclipse Starthilfe

Kapitel 6. Vererbung

Ereignisbehandlung 21

Softwaretechnologie - Wintersemester 2012/ Dr. Günter Kniesel

Programmieren 2 Selbststudium Semesterwoche 4

Grafische Benutzeroberflächen mit Swing

Spring Dynamic Modules for OSGi Service Platforms

Musterlösungen zur Klausur Informatik 3

OSGi. The Next Generation Java Service Platform. SOA - The Java Way or My classpath is killing me. Michael Greifeneder

5.5.8 Öffentliche und private Eigenschaften

Kapitel 6. Vererbung

Für die Erstellung von Javaprogrammen sind eventuell zwei Komponenten nötig. 1. Das Java-Develepment-Kit (JDK) und die 2. Java Runtime Engine (JRE)

5. Threads, Serverprozesse und Benachrichtigungen

Webentwicklung mit Vaadin 7. Theoretische und praktische Einführung in Vaadin 7. Christian Dresen, Michael Gerdes, Sergej Schumilo

Innere Klassen in Java

Java Wireless Toolkit (JWT) Bei der Programmierung von Anwendungsprogrammen für mobile Endgeräte eignet sich die Verwendung des Java Wireless Toolkit.

Udo Matthias Munz. Datenbanken und SQL. mit. Einführung. Informationstechnik

Objektorientierte Programmierung

Web-Anwendungsentwicklung mit dem Delivery Server

Lego Mindstorms NXT über lejos und Eclipse mit Java programmieren

3-schichtige Informationssystem-Architektur

Probeklausur: Programmierung WS04/05

Programmieren I. Die Programmiersprache Java. Institut für Angewandte Informatik

Teil 2: OOP und JAVA (Vorlesung 11)

Programmieren in Java

Software Engineering II

Inhaltsverzeichnis. 2.2 Grundlagen der UML Zusammenfassung... 53

Einführung in die Programmierung

Verteilte Systeme CS5001

von Anja Austermann Drag and Drop

SWIG Simplified Wrapper and Interface Generator. Christian Claus

6 Speicherorganisation

Transkript:

C A R L V O N O S S I E T Z K Y Einführung in JOGL 2.0 Johannes Diemke Übung im Modul OpenGL mit Java Wintersemester 2010/2011

OpenGL Open Graphics Library Spezifikation für ein plattformunabhängiges API für 2D- und 3D-Computergrafik Ist als Zustandsautomat entworfen Dient als Schnittstelle zwischen Benutzer und Grafikkarte Im professionellen Bereich als 3D-Standard führend Aktuelle Version: 4.1 (26. Juli 2010) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/26

Java Bindings for OpenGL Ermöglichen Java Programmen die Nutzung der OpenGL API 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 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

Warum 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 Mit JOGL 2.0 wurden daher Profile als Abstraktion der verschiedenen OpenGL Versionen eingeführt Weiterhin wurde eine geringfügige Refaktorierung der API durchgeführt Programme die OpenGL > 2.1 verwenden wollen benötigen daher JOGL 2.0 Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/26

Installation 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 Bibliotheken von JogAmp bezogen werden http://jogamp.com/ 3 Als nächstes muss das Archiv mit den Bibliotheken in ein beliebiges 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 Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/26

Installation 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 Window Preferences Java Build Path User Libraries New... Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/26

Installation 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 Window Preferences Java Build Path User Libraries New... Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/26

Installation von JOGL 2.0 (Forts.) 4 Konfiguration der Eclipse IDE zur Verwendung von JOGL 2.0 Hinzufügen der JOGL 2.0 JARs jogl.all.jar, gluegen-rt.jar, nativewindow.all.jar, newt.all.jar Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/26

Installation 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 Native library location Edit... External Folder... Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/26

Installation 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 Properties Java Build Path Libraries Add Library... User Library Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/26

Installation 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 Properties Java Build Path Libraries Add Library... User Library Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 11/26

Erstellung einer einfachen JOGL 2.0 Applikation Ziel ist eine Applikation, die ein Fenster öffnet in welches gerendert werden kann Alternative Möglichkeiten OpenGL Zeichenflächen zu erzeugen 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 6 Erstellen eines Animator-Threads Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/26

Schritt 1: Wahl eines GLProfile JOGL 2.0 unterstützt verschiedene OpenGL Profile Vor der Entwicklung einer JOGL 2.0 Applikation muss zunächst ein GLProfile gewählt werden Aktuell unterstützte Profile: 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

Schritt 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

Einschub: GLContext Anschaulich: Beschreibt Eigenschaften einer OpenGL Zeichenfläche OpenGL Version Farbformat, OpenGL Zustand,... Schritt 2: Konfiguration der GLCapabilities Ein GLCapabilities Objekt beschreibt die gewünschten Fähigkeiten eines GLContext public 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

Schritt 3: Erstellen eines GLCanvas Ein GLCanvas ist eine mit AWT kompatible OpenGL Zeichenfläche Erstellt und verwaltet selbstständig seinen GLContext Implementiert das GLDrawable Interface public 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

Schritt 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 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

Schritt 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 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

Schritt 4: Implementieren des GLEventListener (Forts.) Die display-methode wird von dem GLDrawable aufgerufen, wenn ein Neuzeichen notwendig wird public 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

Schritt 4: Implementieren des GLEventListener (Forts.) Die reshape-methode wird von dem GLDrawable nach einem Resize-Event aufgerufen public 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

Schritt 4: Implementieren des GLEventListener (Forts.) Die dispose-methode wird von dem GLDrawable vor dem Zerstören des GLContext aufgerufen Hier sollen eigentlich OpenGL Ressourcen destruiert werden Texturen Shader Programme... Benutzt aber niemand public void dispose(glautodrawable drawable) { } Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 21/26

Schritt 5: Hinzufügen des GLCanvas zu einem AWT Frame public 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

Schritt 6: Erstellen eines Animator-Threads Die display-methode des GLDrawable wird standardmäßig aufgerufen wenn: Resize-Events auftreten Bedeckte Bereiche des Frames wieder sichtbar werden Um die display-methode wiederholt aufzurufen ist ein Animator-Thread notwendig Frame 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

Schritt 6: Erstellen eines Animator-Threads (Forts.) Animator.stop() ist blockierend und kann im AWT Thread zu Deadlocks führen Daher sollte der Aufruf einem eigenen Thread ausgeführt werden frame.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

Das 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 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 Real-Time Rendering http://www.realtimerendering.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 26/26