Graphik-Programmierung mit OpenGL

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Computer Graphics Shader
der Universität Oldenburg
Objektorientierte Programmierung
Ein- und Ausgabe von Dateien
Java3D Einfacher scene graph View branch graph BG Shape3D Knoten S
Kapitel 4 Datenstrukturen
SVG und X3D Referentin: Gergana Ivanova
Ultris Version 8: Erzeugen der Formen und Anzeigen der Vorschau
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Einführung Blue J.
Christos, Kornelia, Jan Christos, Kornelia, Jan Entwicklungsumgebung Versteht unseren Java Programm Code Versteht unseren Java Programm.
Graphische Datenverarbeitung IV Dr. Markus Heitz.
Java: Objektorientierte Programmierung
FH-Hof Geometrie Richard Göbel. FH-Hof Aufbau des virtuellen Universums.
Java: Dynamische Datentypen
Java: Grundlagen der Sprache
FH-Hof Java3D - Grundlagen Richard Göbel. FH-Hof Java3D Konzept Erzeugung eines Szenengraphen als virtuelle Welt Darstellung der virtuellen Welt mit Hilfe.
Processing: Arrays & Laden von Dateien Aufbauend auf dem Beispiel: File I/O LoadFile1.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 6 Model-View-Controler als Grundlage für Nutzerschnittstellen Sommersemester 2003 Lars Bernard.
B. Preim AG Visualisierung Interaktive Computergraphik in Open GL
Viewing: Sichtbarkeitsbestimmung
Java3d „Licht und Material“
Gegenüberstellung von Direct3D und Java3D am praktischen Beispiel
Programmieren mit JAVA Teil V. Grafikausgabe mit JAVA, das AWT Java wurde von Anfang an mit dem Anspruch entwickelt, ein vielseitiges, aber einfach zu.
OpenGL mit Delphi Allgemeines OpenGL-Funktionsbezeichnungen
1DVG3 - Paint Paint ein Zeichenprogramm. DVG3 - Paint 2 Paint – ein Zeichenprogramm.
Computergrafik Vom Dreieck zum Ego-Shooter Olaf Müller
Special Effects Realistischeres Rendern einer Scene.
FH-Hof Konfiguration eines Universums Richard Göbel.
Nico Maas, NetworkCalculator. 2 / 15 Nico Maas, Inhalt Überblick über die Software / Struktogramm Überblick über die Software /
FHP - Fachbereich Bauingenieurwesen
Computergraphik mit OpenGL Einführung. Bilder Objekt existiert im Raum unabhängig vom Betrachter Objekte sind beschrieben durch die Position verschiedener.
Einsteigerkurs Andy Reimann - Mai Intro Trailer.
0.1 Überblick Bereiche der Visualisierung - Flow-Vis - Software-Vis
Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung Prof. Dr. Manfred Thaller AM 3 Übung: Softwaretechnologie.
Ändern von Merkmalen Geometrie Topologie Attribute.
Computergraphische Visualisierungs- verfahren für 3D-Stadtmodelle
Einführung in die Programmiersprache C 4
Aufgabe Modellieren Sie mittels Bézier-Kurven einen Kreis.
1. Entwicklungsumgebung 2. Kontextmenü 3. Compile 4. Objekt 5. Attribut 6. Klasse 7. Deklaration 8. Intialisierung.
Medizinische Visualisierung
Allgemeines zu Datenbanken
Camera, Lights, Action… Dirk Primbs Developer Evangelist
Objekte und ihre Beschreibung
Von Patrick Schmid und Christian Piwecki
U N I V E R S I T Ä T KOBLENZ · LANDAU Arbeitsgruppe Computergrafik 4. Mai / 35 Projektpraktikum AR mit korrekter Beleuchtung Entwicklung einer.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
1 VeranstaltungThemaVortragende AINF-Lehrgang 2003 Titel: Grundlagen der Objektorientierten Programmierung Name: Gruppe Programmierung.
A Workshop About this chapter General description Units Time Schedule
3D Graphics APIs: OpenGL & Fixed Function Pipeline
Multimedia und Virtual Reality Vorlesung am Martin Kurze Multimedia in 3D.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Algorithmen und Datenstrukturen 1 SS 2002
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-Kurs Übung Besprechung der Hausaufgabe
Visualisierung von Geodaten
Ändern der Merkmale : Ändern der Merkmale :Ändern der Merkmale :Ändern der Merkmale : - Geometrie - Topologie - Topologie - Attribute - Attribute ( ArcMap.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
 Einführung  Szenengraphen  Bestandteile  Eingabe  JOGL  LWJGL  Beispiele  ARDOR3D Games 04/23/12Ardor 3D – Holzwarth/Kau 2.
Java Programme nur ein bisschen objektorientiert.
Einführung in OpenGL Seminarvortrag im Rahmen des Bachelorstudiengangs „Scientific Programming“ Tural Bilalov.
Objektorientierte Programmierung Was ist das eigentlich ?
C++ FÜR cOMPUTERSPIELENTWICKLER
Ein Spiel mit der SDL - Teil I. Ein Spiel mit der SDL  kostenlose Bibliothek – Simple DirectMedia Layer Grafik darstellen Benutzereingaben abfragen Sounds.
3D rendering with PHP Die neue PEAR-Klasse Image_3D bietet die Moeglichkeit nur mit PHP5 3d-Grafiken zu rendern.
Aufbau und Funktion von 3D- Grafikkarten von Christian Reis.
Grundkurs Informatik 11-13
Verdeckungsrechnung 2 Ladies & gentleman The title of my talk is :
 Präsentation transkript:

Graphik-Programmierung mit OpenGL

Graphik-Programmierung Anwendungsprogramm Graphikbibliothek Hardware B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung Inhalt OpenGL Szenengraph-APIs B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung Graphik APIs Low Level IrisGL (vorher Iris 3D API) OpenGL (grundlegende Industrie-Standard 3D API für direkten Hardware-Zugriff, entwickelt aus IrisGL) MesaGL (Freeware OpenGL-Implementation, verfügbar für viele Plattformen) Ziel: Abstraktion von der konkreten Graphikhardware (Größe und Vorhandensein bestimmter Buffer, Hardwareimplementierung bestimmter Funktionen) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung Graphik APIs High Level Open Inventor (sehr flexible, erweiterbare Szenengraph-API für Prototyp-Entwicklung, relativ langsam, Interaktionsmechanismen) Performer (monolithische SzenenGraph-API für High-Performance-Anwendungen) OpenGL Optimizer (Kostenloses Toolkit, für CAD/CAM-Anwendungen entwickelt. Mesh simplification, occlusion culling, picking). Cosmo3D (SzenenGraph-API mit Eigenschaften von Performer und Inventor; gedacht für VRML-Entwicklung) OpenGL++ (SGI, Intel, IBM) (SzenenGraph-API, kombiniert Teile aus Optimizer, Performer und Inventor) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL-Grundlagen Low-level Bibliothek für 2D- und 3D-Graphik Überlegung bei Low-Level-Bibliotheken: Vorrat an vordefinierten Primitiven. Open GL: relativ gering. Auf OpenGL aufbauende Extensions erweitern den Vorrat. Aufsätze: OpenInventor, Performer, GLUT, GLU-Bibliothek (OpenGL Utility Library) Hardwareunabhängig (Mindestfunktionalität auf allen Plattformen - evtl. in Software) Unabhängig vom Fenstermanager (X11, Win32, Mac) Client-Server Unterstützung (X11) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL-Zustände OpenGL – Zustandsmaschine Zustände sind globale Variablen! Operationen aufgrund von Zustandsvariablen interpretiert. Beispiele: Rendermodus Beleuchtungsmodell Zeichenattribute Setzen und löschen der Variablen: void glEnable ( GLenum attribut ); void glDisable ( GLenum attribut ); B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Beispiel Wichtige Funktionen: Hintergrund löschen: glClear(GLbitfield mask); GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT Punkte definieren: glVertex2f(GLfloat x1, GLfloat y1); glVertex3f(GLfloat x1, GLfloat y1, GLfloat z1); Farbe festlegen: glColor3f(GLfloat r, GLfloat g, GLfloat b); B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Beispiel Objekt zeichnen: glBegin ( GLenum GL_POLYGON ); glVertex3f ( GLfloat x1, GLfloat y1, GLfloat z1 ); glVertex3f ( GLfloat x2, GLfloat y2, GLfloat z2 ); glVertex3f ( GLfloat x3, GLfloat y3, GLfloat z3 ); glVertex3f ( GLfloat x4, GLfloat y4, GLfloat z4 ); glEnd (); Andere Modi: GL_POINTS, GL_LINES (jeweils 2 Punkte verbunden), GL_LINE_STRIP, GL_LINE_LOOP (geschlossen), GL_POLYGON (gefüllt) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Beispiel Beispiel für ein Polygon: glBegin(GL_POLYGON); glVertex2f(-2.0,-2.0); glVertex2f( 2.0,-2.0); glVertex2f( 2.0, 2.0); glVertex2f(-2.0, 2.0); glEnd(); B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Zeichenmodi Gleiche Punkte: unterschiedliche Modi B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Zeichenmodi Polygontypen: Triangle-Strips Jeder neue Eckpunkt wird mit den beiden vorherigen zu einem Dreieck verbunden (n+2 Punkte: n Dreiecke). Quad-Strips Je zwei Eckpunkte werden mit den vorherigen zu einem Viereck verbunden (2n+2 Punkte: n Vierecke) Quelle: Angel (2000) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Zeichenmodi Attribute für Linien und Polygone zur Spezifikation von Füllmustern und Kantendarstellungen. (glLineWidth, glLineStipple, …) Farben (Vorder- und Hintergrund) glColor3f (1.0, 0.0, 0.0); // red glClearColor (0, 0, 0); // black Quelle: Angel (2000) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Wichtige Funktionen Sichtbaren Bereich festlegen: glViewport ( GLint x, GLint y, GLsizei width, GLsizei height ); Backface Culling: glCullFace ( GLenum GL_FRONT ); // oder GL_BACK // GL FRONT_AND_BACK glEnable ( GLenum GL_CULL_FACE ); Tiefenbuffer: glEnable ( GLenum GL_DEPTH_TEST ); B. Preim AG Visualisierung Graphikprogrammierung

OpenGL: Wichtige Funktionen Auswirkungen des Viewports: Clippen am Viewport erforderlich. OpenGL-Spezifikation: glOrtho2D (left, right, bottom, top); Quelle: Angel (2000) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Kameras Position (Center of Projection) Orientierung Sichtbereich (field of view) Ausschnitt der Bildebene (Viewport) gluLookAt (cop_x, cop_y, cop_z, at_x, at_y, at_z, …); gluPerspective (field_of_view, …), Quelle: Angel (2000) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Kameras Orthographische Projektionen (Parallel) Quaderförmiger Sichtbereich OpenGL-Spezifikation: glOrtho (left, right, bottom, top, near, far); Eigenschaften: Auch Objekte hinter der Kamera können gesehen werden. Quelle: Angel (2000) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Kameras Perspektivische Projektion: Sichtbereich hat die Form eines Pyramidenstumpfes OpenGL-Spezifikation: glFrustum (xmin, xmax, ymin, ymax, near, far); oder über den Öffnunsgwinkel und das Verhältnis von x- zu y-Werten: gluPerspective (fovy, aspect, near, far); Quelle: Angel (2000) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung Open GL: GLUT GLUT - GL Utility Toolkit Systemunabhängige OpenGL-Programme Mehrere OpenGL-Fenster Callback-Ereignisverarbeitung Idle-Routine, Timer Funktionen für verschiedene Objekte Fensterverwaltung, Overlay B. Preim AG Visualisierung Graphikprogrammierung

Open GL: GLUT-Beispiel #include <GL\glut.h> void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_POLYGON); glVertex2f(-0.5,-0.5); glVertex2f(-0.5, 0.5); glVertex2f( 0.5, 0.5); glVertex2f( 0.5, 0.5); glEnd(); glutSwapBuffers(); } int main() glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutCreateWindow("Polygon"); glutDisplayFunc(&display); glutMainLoop(); B. Preim AG Visualisierung Graphikprogrammierung

Open GL: GLUT-Initialisierung GLUT initialisieren: void glutInit ( int* argcp, char** argv ); Fenster initialisieren: void glutInitWindowSize ( int width, int height); void glutInitWindowPosition ( int x, int y ); Graphikmodus: void glutInitDisplayMode ( unsigned int mode ); Mögliche Modi: GLUT_RGBA, GLUT_RGB, GLUT_SINGLE, GLUT_DOUBLE GLUT_ALPHA, GLUT_DEPTH, GLUT_STENCIL B. Preim AG Visualisierung Graphikprogrammierung

OpenGL: Fenster-Initialisierung Fenster generieren: int glutCreateWindow ( char* name ); Fenster zerstören: void glutDestroyWindow ( int win ); Fenster neu zeichnen: void glutPostRedisplay ( void ); Bildschirmspeicher umschalten: void glutSwapBuffers ( void ); B. Preim AG Visualisierung Graphikprogrammierung

OpenGL: Callback-Registrierung Display Callback: void glutDisplayFunc ( void (*func)(void) ); Tastatur Callback: void glutKeyboardFunc ( void (*func) (unsigned char key, int x, int y) ); Maus Callback: void glutMouseFunc ( void (*func) (int button, int state, int x, int y)); Idle Callback: void glutIdleFunc ( void (*func)(void) ); B. Preim AG Visualisierung Graphikprogrammierung

OpenGL: Callback-Registrierung Timer Callback: void glutTimerFunc ( unsigned int msecs, void (*func) (int value), int value ); Callback für Änderung der Fenstergröße: void glutReshapeFunc ( void (*func) (int width, int height) ); B. Preim AG Visualisierung Graphikprogrammierung

OpenGL: Ereignisverwaltung B. Preim AG Visualisierung Graphikprogrammierung

OpenGL: GLUT-Ereignisverarbeitung void glutMainLoop ( void ); while (1) { if (Graphik wurde verändert) { call DISPLAY Callback Funktion; } if (Fenster wurde verändert) { call RESHAPE Callback Funktion; if (Tastatur betätigt oder Maus bewegt) { call KEYBOARD/MOUSE Callback Funktion; call IDLE Callback Funktion; B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung OpenGL: Menüs Menü-Callback: void glutCreateMenu ( void (*func), (int value)); Menü festlegen: void glutSetMenu ( int menu ); Menü abfragen: int glutGetMenu ( void ); Menü zerstören: void glutDestroyMenu ( int menu ); Menüeintrag hinzufügen: void glutAddMenuEntry ( char* name, int value); B. Preim AG Visualisierung Graphikprogrammierung

OpenGL: Komplexe Objekte Kugel: void glut{Solid|Wire}Sphere ( GLdouble radius, GLint slices, GLint stacks ); Würfel: void glut{Solid|Wire}Cube ( GLdouble size ); Kegel: void glut{Solid|Wire}Cone ( GLdouble base, GLdouble height, GLint slices, GLint stacks ); Torus: void glut{Solid|Wire}Torus ( GLdouble inRadius, GLdouble outRadius, GLint sides, GLint rings ); B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung Szenengraph-API Knoten, die in einer Baumstruktur verknüpft sind, beschreiben die darzustellende Szene. Arten von Knoten: Elementare Knoten: Geometrie Lichtquellen Kamera Attribute zu Geometrien (z.B. Farbe, Transparenz, Brechzahl) Transformationen Texturen (Muster, z.B. holzartige Maserungen) Elemente zur Steuerung der Struktur/des Traversals Gruppenknoten Zusammenfassung von Geometrien und anderen Eigenschaften, Repräsentation eines hierarchischen Modellzusammenhangs B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung Szenengraph-API B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung Szenengraph-API Beim Rendering: Traversieren des Szenengraphen Aufbau interner Datenstrukturen Setzen verschiedener Modi Transformationen (Aufbau der Transformationsmatrizen) Rendern von Geometrie Abbildung der Graphikfunktionalität der Hardware oder einer speziellen Bibliothek auf einer höheren Ebene B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung Szenengraph-API t0 als aktuelle Transformationsmatrix speichern Gruppe g1  Status auf Stack aktuelle Trafo mit t1 multiplizieren Objekt o1 rendern Gruppe g3 behandeln aktuelle Trafo wiederherstellen aktuelle Trafo mit t2 multiplizieren Gruppe g2  Status auf Stack aktuelle Trafo mit t3 multiplizieren Objekt o2 rendern aktuelle Trafo mit t4 multiplizieren Status vom Stack (g2) Status vom Stack (g1) B. Preim AG Visualisierung Graphikprogrammierung

B. Preim AG Visualisierung Graphikprogrammierung Zusammenfassung Überblick über LowLevel und HighLevel-Graphik APIs Fokus: OpenGL, plattformunabhängige Low-Level- Bibliothek GL-Funktionen: Zur Spezifikation von Graphik-primitiven (Was wird gezeichnet?) und Attributen (Wie?) sowie der Kamera. High-Level-APIs basieren oft auf einem Szenengraph; sind konsequenter objekt-orientiert. B. Preim AG Visualisierung Graphikprogrammierung