Computergraphik Grundlagen

Ähnliche Dokumente
Einführung in OpenGL. Einführung in OpenGL

Grafikprogrammierung (Echtzeitrendering)

1.1 Verwendung von GLUT

Spiele, Simulation, dynamische Systeme

DirectX und OpenGL. Proseminar Multimedia-Hardwareerweiterungen Michel Weimerskirch, 15. Februar 2006

Computergrafik II. OpenGL Einführung

Lehrheft OpenGL. Zur Veranstaltung Computergraphik I (Grundlagen) Prof. Dr. Stefan Schlechtweg-Dorendorf Hochschule Anhalt Fachbereich Informatik

Einführung in OpenGL. Thomas Kalbe Technische Universität Darmstadt.

Workshop: Einführung in die 3D-Computergrafik. Julia Tolksdorf Thies Pfeiffer Christian Fröhlich Nikita Mattar

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

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

GUI Programmierung mit GTK

DirectX und OpenGL. Proseminar Multimedia-Hardwareerweiterungen. Michel Weimerskirch

Eine Einführung in OpenGL

Programmieren mit OpenGL und GLUT

Programmierung mit C Zeiger

Proseminar Computergrafik: OpenGL. Marcel Heckel

Eine schnelle Processing-Einführung. von Thomas Rau

Einstieg in die Informatik mit Java

Ereignisorientierte Programmierung

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Erste Schritte der Programmierung in C

Programmierkurs C++ Kapitel 6 Module Seite 1

Typ : void* aktuelle Parameter Pointer von beliebigem Typ

Verteidigung der Diplomarbeit 3D-Netzwerk-Visualisierung

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Seitenanzahl 44 GLUT. Anmerkungen, Feedback, etc. sind natürlich wie immer herzlich Willkommen.

Graphische Systeme Folie 1-1. b) es sollte unabhängig von der zugrundeliegenden Hardware (SPARC, Alpha, Pentium,...) sein

Kapitel 9: Klassen und höhere Datentypen. Klassen und höhere. Objekte, Felder, Methoden. Küchlin/Weber: Einführung in die Informatik

Grundlagen der Informatik

Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

Java Kurzreferenz Für Fortgeschrittene

Einführung in die Programmierung

Theorie zu Übung 8 Implementierung in Java

Erste Schritte mit HG 2

Repetitorium Informatik (Java)

Eine solche Programmierschnittstelle ist GLUT (OpenGL Utility Toolkit - Aussprache wie glutttony ).

Ereignisse Auf Benutzereingaben reagieren

Deklarationen in C. Prof. Dr. Margarita Esponda

Objektbasierte Entwicklung

Arduino für FunkAmateure

Übungsstunde 2 zu Computergrafik 1

Grundlagen der Informatik

1 Aufgaben 1.1 Objektorientiert: ("extended-hamster") Sammel-Hamster

Ein- und Ausgabe (I/O)

Szenengraph-Architekturen im Kontext von VR- und AR-Anwendungen

Objektorientierte Programmierung

Das Model/View/Controller Paradigma

Übungspaket 23 Mehrdimensionale Arrays

Fachhochschule Südwestfalen Wir geben Impulse. Kontrollstrukturen und Schleifen in Octave

Interaktive Simulationen Lektion 1/3: Event-Driven Design und Signals

Einführung: Zustandsdiagramme Stand:

Objektorientiertes Programmieren für Ingenieure

Delegatesund Ereignisse

Einführung in die Programmierung

Java: Eine kurze Einführung an Beispielen

Eine Einführung in C-Funktionen

Prof. W. Henrich Seite 1

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Programmiersprachen Einführung in C

Zahlenraten: Ein Spiel in Java.

Speicherklassen (1) Lokale Variablen

Unterlagen. CPP-Uebungen-08/

Ein- und Ausgabe mit Dateien

Programmieren in C/C++ und MATLAB

Programmierkurs Java

In BlueJ geht es einfach

Diplomarbeit. Neue Möglichkeiten durch programmierbare Shader. Unter der Leitung von: Prof. Dr.-Ing. Detlef Krömker

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg

Programmiersprachen Einführung in C. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm. Unser erstes C-Programm

Oliver Brinkmann Java Swing-Applikationen & JApplets (mit NetBeans)

Vergleich CAD-Programme

OpenGL. (Open Graphic Library)

3D-Konstruktionsgrafik. FRILO Software GmbH Stand:

Zwischenvortrag zum Entwicklungsstand der Bachelor-Arbeit. Direct 3D-Output für ein Rendering Framework

Anwendung und Programmierung von Mikrocontrollern. Anwendung und Programmierung von Mikrocontrollern

Programmieren in C/C++ und MATLAB

Probeklausur: Programmierung WS04/05

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Informatik Repetitorium SS Volker Jaedicke

Architektur moderner GPUs. W. Sczygiol - M. Lötsch

Praktikum Ingenieurinformatik. Termin 4. Funktionen, numerische Integration

Einführung in COM Seite 1

Programmier-Befehle - Woche 10

3. Die Programmiersprache Java

Grundlagen von C# - 1

Parallel-IO. Ports am ATmega128

(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT

Szenario 3: Service mit erweiterter Schnittstelle

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

Tag 4 Repetitorium Informatik (Java)

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Vererbung & Schnittstellen in C#

Smartphone Entwicklung mit Android und Java

0. Einführung & Motivation

Vorkurs C++ Programmierung

Blender Tutorial Dresden in 3D

Transkript:

Prof. Stefan Schlechtweg-Dorendorf Hochschule Anhalt (FH) Köthen Fachbereich Informatik Wintersemester 2010/2011 1 / 27

Teil II CG-Programmierung und OpenGL 2 / 27

Inhalt 1. Computergraphik-Programmierung 2. OpenGL-API Einführung Dokummentation und Materialien Bibliotheken Funktionen und Bezeichner Arbeitsweise 3. OpenGL-Beispiel Überblick Callbacks Ereignisorientierte Architektur Display-Callback Zusammenfassung 3 / 27

Wo sind wir? 1. Computergraphik-Programmierung 2. OpenGL-API 3. OpenGL-Beispiel 4 / 27

Computergraphik-Programmierung Anwendung Funktionsaufruf Daten Graphiksystem Output Input I/O-Geräte Anwendung kommuniziert nicht direkt mit dem Graphiksubsystem verschiedene Bibliotheken dazwischengeschaltet OpenGL DirectX Bibliotheken stellen High-Level-Schnittstelle für Datenaustausch und Funktionsaufrufe zur Verfügung 5 / 27

Computergraphik-Programmierung Anwendung andere API OpenGL Treiber / Systemprogramme Betriebssystem Bibliotheken können auch aufeinander aufbauen 6 / 27

Wo sind wir? 1. Computergraphik-Programmierung 2. OpenGL-API Einführung Dokummentation und Materialien Bibliotheken Funktionen und Bezeichner Arbeitsweise 3. OpenGL-Beispiel 7 / 27

OpenGL-API 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) ähnlich zu anderen Graphik-APIs (Java3D, DirectX,... ) 8 / 27

OpenGL-API einer der älteren Graphikstandards (erste Veröffentlichung 1992) seit dem zum Quasi-Standard aufgestiegen ständige aber langwierige Weiterentwicklung Einbau programmierbaren Shadings Unterstützung mobiler Geräte mit OpenGL ES Entwicklung von WebGL vielfältige Aufsätze und Erweiterungen verfügbar nicht Szenegraphen-basiert 9 / 27

Dokumentation und Materialien Homepage: www.opengl.org Dokumentationen Red Book www.glprogramming.com/red/ Blue Book www.glprogramming.com/blue/ sehr gute Tutorials unter http://nehe.gamedev.net/ 10 / 27

Weitere Bibliotheken OpenGL selber stellt nur grudlegende Funktionen zur Verfügung zusätzlich zwei weitere Bibliotheken: GLU OpenGL Utility Library vordefinierte Objekte vereinfachte Betrachtungstransformationen bzw. Kameradefinitionen GLUT GL Utility Toolkit ermöglicht Systemunabhängige OpenGL-Programme mehrere OpenGL-Fenster Callback-Ereignisverarbeitung Idle-Routine, Timer Funktionen für verschiedene Objekte Fensterverwaltung, Overlay 11 / 27

OpenGL-Funktionen sieben große Gruppen von Funktionen: Primitiv-Funktionen: definieren low-level-objekte (Punkte, Liniensegmente, Pixel, Text, Oberflächen,... ) Attribut-Funktionen: spezifizieren, wie die Primitive auf der Ausgabe erscheinen (Farbe, Linienstil, Transparenz, Font,... ) Betrachtungs-Funktionen: definieren die synthetische Kamera (Position, Orientierung, Kameraparameter,... ) Transformations-Funktionen: zur Transformation von Objekten (Rotation, Verschiebung, Skalierung,... ) Eingabe-Funktionen: für interaktive Applikationen zur Behandlung verschiedener Eingabegeräte (Tastatur, Maus,... ) Kontroll-Funktionen: zur Kommunikation mit dem Fenstersystem, Initialisierung, Fehlerbehandlung,... Abfrage-Funktionen: zur Abfrage eingestellter Parameter im API 12 / 27

OpenGL-Funktionen und Bezeichner alle Bibliotheken definieren eine Reihe von Funktionen und Bezeichnern (Konstanten) erkenntlich durch einen Präfix gl bzw. GL für GL-Funktionen und -Bezeichner glu bzw. GLU für GLU-Funktionen und -Bezeichner glut bzw. GLUT für GLUT-Funktionen und -Bezeichner ansonsten sprechende Namen meist nach einem einheitlichen Schema aufgebaut gl<name><anz><typ>() name Funktionsname (Vertex, Color) anz Anzahl der Argumente (2, 3, 4) typ Datentyp der Argumente (i, f, d,... ) Beispiele: glvertex2i(), glvertex3f(), glvertex4d() glcolor3f(), glcolor4d() 13 / 27

OpenGL als Zustandsmaschine Arbeitsweise von OpenGL durch Zustände gesteuert Zustände sind ähnlich globaler Variablen Operationen aufgrund von Zustandsvariablen interpretiert Beispiele: Rendermodus Beleuchtungsmodell Zeichenattribute einmal gesetzter Zustand gilt solange, bis er geändert wird (auch über mehrere Aufrufe einer Funktion hinweg) Setzen und löschen der Variablen: void glenable( GLenum attribut); void gldisable( GLenum attribut); 14 / 27

Wo sind wir? 1. Computergraphik-Programmierung 2. OpenGL-API 3. OpenGL-Beispiel Überblick Callbacks Ereignisorientierte Architektur Display-Callback Zusammenfassung 15 / 27

OpenGL-Beispiel # include "glut.h" /* Zeichenfunktion. Hier stehen die OpenGL - Befehle, die letztendlich die Darstellung auf dem Bildschirm erzeugen */ void mydisplay ( void ) { glclear ( GL_COLOR_BUFFER_BIT ); // Bildschirm ( Fensterinhalt ) loeschen // Hier kommen die Zeichenbefehle hin } glutswapbuffers (); // " Anzeige " des Bildes ( DoubleBuffering ) int main ( int argc, char ** argv ) { glutinit ( &argc, argv ); // Initialisierung von GLUT glutinitdisplaymode ( GLUT_DOUBLE GLUT_RGBA ); // Einstellen des Anzeigemodus glutinitwindowsize ( 600, 600); // Einstellen der Fenstergroesse glutcreatewindow ( " OpenGL "); // Fenster erzeugen glutdisplayfunc ( mydisplay ); // Setzen der Display - Funktion glutmainloop ( ); // glut - Hauptschleife exit ( 0); } 16 / 27

Die main-funktion initialisieren des GLUT-Toolkits Initialisieren des Anzeigemodus Einstellen der Fenstergröße (600 600) Fenster mit dem Titel OpenGL erzeugen Registrieren der Display-Callback Eintreten in die GLUT-Hauptschleife 17 / 27

Callbacks spezielle Funktionen, die von OpenGL (GLUT) zurückgerufen werden Programmierer stellt Funktion bereit, ruft sie aber nicht direkt auf Callbacks müssen registriert (angemeldet) werden Beispiel: Display-Callback registriert mit glutdisplayfunc() Übergeben den Funktionsnamen immer dann aufgerufen, wenn die Ausgabe neu gezeichnet werden muss Funktion muß vor Registrierung deklariert sein glutdisplayfunc ( mydisplay ); 18 / 27

weitere wichtige Callbacks: Callbacks Reshape-Callback aufgerufen, wenn sich Geometrie oder Position des Fensters ändert Keyboard-Callback aufgerufen, wenn eine Taste gedrückt oder losgelassen wird Mouse-Callback aufgerufen beim Drücken und Loslassen der Maustasten Motion-Callback aufgerufen bei Mausbewegungen Idle-Callback aufgerufen, wenn der Rechner Zeit hat Time-Callback aufgerufen in bestimmbaren Zeitintervallen generelles Konzept: Ereignisorientierte Architektur 19 / 27

Ereignisorientierte Architektur oft verwendet (heute fast ausschließlich) bei Fenstersystemen und anderen größeren Systemen, insb. in der Computergraphik bei interaktiven Anwendungen Eingabegeräte, die Anwendung, das Betriebssystem usw. erzeugen Ereignisse (events) Ereignisse werden in einer Ereigniswarteschlange (event queue) nach dem FIFO-Prinzip gespeichert Anwendung arbeitet die Ereigniswarteschlange ab Anwendung beinhaltet Funktionen, die auf unterschiedliche Ereignisse entsprechend reagieren Programmierer ruft Funktionen nicht explizit auf sondern System erzeugt Funktionsaufruf bei OpenGL: Callbacks 20 / 27

Die GLUT-Hauptschleife Programm fragt ständig Ereigniswarteschlange ab entsprechend dem Ereignistyp wird Callback aufgerufen (sofern eine registriert wurde) sind alle typisierten Ereignisse abgearbeitet, wird die Idle-Callback aufgerufen 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 ; } 21 / 27

wichtigste Callback Die Display-Callback erzeugt die graphische Ausgabe aufgerufen, wann immer ein Neuzeichnen des Ausgabefensters notwendig ist void display ( void ) { glclear ( GL_COLOR_BUFFER_BIT ); // Funktionsaufrufe zum Erzeugen der graphischen Ausgabe hier glutswapbuffers (); } glclear(...) löscht den Ausgabebereich glutswapbuffers(...) kennzeichnet Ende der Ausgabe und erzwingt damit eine Ausgabe auf dem Gerät (auch mit glflush(...)) 22 / 27

Die Display-Callback Erzeugen graphischer Ausgaben: direkte zweidimensionale Ausgabe auf dem Bildschirm (nicht mit OpenGL geräteabhängig) Modellieren zwei- oder dreidimensionaler Objekte durch Angabe der Geometrie und Topologie (folgt in Teil III) Attributieren der erzeugten Geometrie Einstellen der virtuellen Kamera Ausgabe zunächst: Verwenden vordefinierter Geometrien und einer Standardansicht void display ( void ) { glclearcolor ( 0.0, 0.0, 1.0, 0.0); glclear ( GL_COLOR_BUFFER_BIT ); glutwiresphere ( 0.5, 10, 10); glutswapbuffers (); } 23 / 27

Die Display-Callback glclearcolor( red, green, blue, alpha) setzt die Hintergrundfarbe als RGBα-Tupel glclear(...) löscht den Hintergrund mit der spezifizierten Hintergrundfarbe glutwiresphere( radius, slices, stacks) vordefinierte Geometrie aus der GLUT-Library Drahtgitterkugel im Koordinatenursprung radius = Radius der Kugel slices = Anzahl der Längengrade stacks = Anzahl der Breitengrade 24 / 27

Standard-Koordinatensystem OpenGL nutzt ein flexibles System der Koordinatentransformationen, um die genaue Ansicht zu bestimmen folgt im Teil III vordefinierte Standardansicht ohne weitere Einstellungen im Prinzip Paralleprojektion auf die xy-ebene 0 1 1 0 25 / 27

OpenGL-Beispiel # include "glut.h" /* Zeichenfunktion. Hier stehen die OpenGL - Befehle, die letztendlich die Darstellung auf dem Bildschirm erzeugen */ void mydisplay ( void ) { glclearcolor ( 0.0, 0.0, 1.0, 0.0); // blauer Hintergrund glclear ( GL_COLOR_BUFFER_BIT ); // Bildschirm ( Fensterinhalt ) loeschen glutwiresphere ( 0.5, 10, 10); // Kugel glutswapbuffers (); // " Anzeige " des Bildes ( DoubleBuffering ) } int main ( int argc, char ** argv ) { glutinit ( &argc, argv ); // Initialisierung von GLUT glutinitdisplaymode ( GLUT_DOUBLE GLUT_RGBA ); // Einstellen des Anzeigemodus glutinitwindowsize ( 600, 600); // Einstellen der Fenstergroesse glutcreatewindow ( " OpenGL "); // Fenster erzeugen glutdisplayfunc ( mydisplay ); // Setzen der Display - Funktion glutmainloop ( ); // glut - Hauptschleife exit ( 0); } 26 / 27

OpenGL-Beispiel Erstes Beispiel Zweites Beispiel 27 / 27