Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Graphik-Programmierung mit OpenGL. B. Preim AG Visualisierung Graphikprogrammierung2 Hardware Graphikbibliothek Anwendungsprogramm Graphik-Programmierung.

Ähnliche Präsentationen


Präsentation zum Thema: "Graphik-Programmierung mit OpenGL. B. Preim AG Visualisierung Graphikprogrammierung2 Hardware Graphikbibliothek Anwendungsprogramm Graphik-Programmierung."—  Präsentation transkript:

1 Graphik-Programmierung mit OpenGL

2 B. Preim AG Visualisierung Graphikprogrammierung2 Hardware Graphikbibliothek Anwendungsprogramm Graphik-Programmierung

3 B. Preim AG Visualisierung Graphikprogrammierung3 Inhalt OpenGL Szenengraph-APIs

4 B. Preim AG Visualisierung Graphikprogrammierung4 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)

5 B. Preim AG Visualisierung Graphikprogrammierung5 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) Graphik APIs

6 B. Preim AG Visualisierung Graphikprogrammierung6 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)

7 B. Preim AG Visualisierung Graphikprogrammierung7 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 );

8 B. Preim AG Visualisierung Graphikprogrammierung8 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);

9 B. Preim AG Visualisierung Graphikprogrammierung9 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) OpenGL: Beispiel

10 B. Preim AG Visualisierung Graphikprogrammierung10 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(); OpenGL: Beispiel

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

12 B. Preim AG Visualisierung Graphikprogrammierung12 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) OpenGL: Zeichenmodi Quelle: Angel (2000)

13 B. Preim AG Visualisierung Graphikprogrammierung13 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 OpenGL: Zeichenmodi Quelle: Angel (2000)

14 B. Preim AG Visualisierung Graphikprogrammierung14 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 ); OpenGL: Wichtige Funktionen

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

16 B. Preim AG Visualisierung Graphikprogrammierung16 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, …), OpenGL: Kameras Quelle: Angel (2000)

17 B. Preim AG Visualisierung Graphikprogrammierung17 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. OpenGL: Kameras Quelle: Angel (2000)

18 B. Preim AG Visualisierung Graphikprogrammierung18 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); OpenGL: Kameras Quelle: Angel (2000)

19 B. Preim AG Visualisierung Graphikprogrammierung19 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

20 B. Preim AG Visualisierung Graphikprogrammierung20 Open GL: GLUT-Beispiel #include 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); glEnd(); glutSwapBuffers(); } int main() { glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutCreateWindow("Polygon"); glutDisplayFunc(&display); glutMainLoop(); }

21 B. Preim AG Visualisierung Graphikprogrammierung21 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

22 B. Preim AG Visualisierung Graphikprogrammierung22 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 );

23 B. Preim AG Visualisierung Graphikprogrammierung23 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) );

24 B. Preim AG Visualisierung Graphikprogrammierung24 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) ); OpenGL: Callback-Registrierung

25 B. Preim AG Visualisierung Graphikprogrammierung25 OpenGL: Ereignisverwaltung

26 B. Preim AG Visualisierung Graphikprogrammierung26 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; }

27 B. Preim AG Visualisierung Graphikprogrammierung27 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);

28 B. Preim AG Visualisierung Graphikprogrammierung28 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 );

29 B. Preim AG Visualisierung Graphikprogrammierung29 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

30 B. Preim AG Visualisierung Graphikprogrammierung30 Szenengraph-API

31 B. Preim AG Visualisierung Graphikprogrammierung31 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 Szenengraph-API

32 B. Preim AG Visualisierung Graphikprogrammierung32 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 wiederherstellen aktuelle Trafo mit t4 multiplizieren Gruppe g3 behandeln Status vom Stack (g2) Status vom Stack (g1) Szenengraph-API

33 B. Preim AG Visualisierung Graphikprogrammierung33 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.


Herunterladen ppt "Graphik-Programmierung mit OpenGL. B. Preim AG Visualisierung Graphikprogrammierung2 Hardware Graphikbibliothek Anwendungsprogramm Graphik-Programmierung."

Ähnliche Präsentationen


Google-Anzeigen