3D Programmierpraktikum: Szenegraphen und Texturierung

Ähnliche Dokumente
Programmierpraktikum 3D Computer Grafik

3D Programmierpraktikum: OpenGL Shading Language (GLSL)

3D Programmierpraktikum: Schattenberechnung in Echtzeit

3D Programmierpraktikum: Einführung in C++ - Teil 1

3D Programmierpraktikum: Geometrische Transformationen, Materialien und Beleuchtung

3D Programmierpraktikum: Einführung in C++ - Teil 2

Programmierpraktikum 3D Computer Grafik

Programmierpraktikum 3D Computer Grafik

Computergrafik 1 Übung

GPU Programmierung 6. Juli 2004 M. Christen, T. Egartner, P. Zanoni

Programmierpraktikum 3D Computer Grafik

Übung: Computergrafik 1

Programmierpraktikum 3D Computer Grafik

Übungsstunde 8 zu Computergrafik 1

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12

(7) Normal Mapping. Vorlesung Computergraphik II S. Müller. Dank an Stefan Rilling U N I V E R S I T Ä T KOBLENZ LANDAU

Texture Mapping. Texturen

Texture Mapping Beispiel. Universität Frankfurt

Computergrafik Universität Osnabrück, Henning Wenke,

UV Texturen (UV Mapping)

Übungsstunde 7 zu Computergrafik 1

Übung Smart Graphics

Computergrafik Universität Osnabrück, Henning Wenke,

Probelektion zum Thema. Shadow Rendering. Shadow Maps Shadow Filtering

Einführung in die API OpenGL

Programmierpraktikum 3D Computer Grafik

Einführung in die Programmierung für NF MI. Übung 07

(6) Fortgeschrittene GPU- Programmierung

Java für Bauingenieure

Computergraphik Grundlagen

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Algorithmen und Datenstrukturen

Szenengraphen. Codruţa Cosma. Universität Ulm Sommersemester 2005

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

7. Übung Informatik II - Objektorientierte Programmierung

Repetitorium Informatik (Java)

Medientechnik. Übung 5 Java Bildbearbeitung - Teil 2

Spieleprogrammierung mit DirectX und C++

Die Elemente einer Szene werden in einer Graphstruktur gespeichert

Gliederung. Blending Licht Anwendungsbeispiel Optimierung OpenGL heute und morgen Wilfried Mascolus - OpenGL Teil II 2/20

Display-Listen, Blending, Antialiasing, Nebel. Display-Listen

Grundlagen Polymorphismus Eigenschaften virtueller Klassen Mehrfachvererbung bei ROOT. Mehrfache Vererbung. Daniel Beneckenstein. 21.

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Java Kurs für Anfänger Einheit 4 Klassen und Objekte

Martin Unold INFORMATIK. Geoinformatik und Vermessung

Javakurs für Anfänger

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 08. Oktober Klausur II

C for Graphics Benjamin Rommel Seminar 'Paralleles Rechnen auf Grafikkarten' Sommersemester 2009 Betreuer: Julian M.

Prinzipien der objektorientierten Programmierung (OOP)

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.

Das ausführbare Programm Bsp1.cfg, Bsp1.dof, Bsp1.dpr, Bsp1.res Projektdateien für Delphi 7 Prak.pas

Informatik II Prüfungsvorbereitungskurs

Praktikum 3 Algorithmik SS Aufgabe 10: Aufgabe 9 ( Skyline-Problem ) weitere Aufgaben folgen. Name:... Matr-Nr:...

Javakurs für Anfänger

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

Repetitorium Programmieren I + II

Grundlagen der Informatik / Algorithmen und Datenstrukturen. Aufgabe 139

Shader. Computer Graphics: Shader

Universität Osnabrück Fachbereich Mathematik / Informatik. 5. Vorlesung ( )

Vorlesung Datenstrukturen

Einführung in GLSL - OpenGL Shading Language. Athanasios Karamalis

Fragen zur OOP in Java

OpenGL auf Mac OS X und ios

C++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Informatik I (D-MAVT)

1 Erweiterung durch eigene Java-Klassen

ÜBUNGEN ZUR OBJEKTORIENTIERTEN MODELLIERUNG

OpenGL und die Fixed-Function-Pipeline

Objektorientierte Programmierung Studiengang Medieninformatik

Übungsklausur Programmieren / Algorithmen und Datenstrukturen 1

Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur

Klausur Software-Entwicklung März 01

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Proseminar: Virtuelle Präsenz

Die Welt der Shader. Fortgeschrittene Techniken III

Logische Datenstrukturen

3. Die Datenstruktur Graph

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Vererbung in der objektorientieren Programmierung

Programmieren in Java -Eingangstest-

Programmierstarthilfe SS 2008 Fakultät für Ingenieurwissenschaften und Informatik 8. Blatt Für den 16. und

Programmierpraktikum 3D Computer Grafik

5 Das Projekt Apfelwein

1. Aufgabe (6 Punkte): Java-Programmierung (Arrays)

16. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2

Entwurf und Analyse von Datenstrukturen

EINFÜHRUNG IN DIE PROGRAMMIERUNG

C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17

15. Ausnahmebehandlung Programmieren / Algorithmen und Datenstrukturen 2

Geometrische Primitive und Hidden Surface Removal

OpenGL 2.0 Vertex Arrays

7.1 Polygon Offset. Anwendung - Darstellung von Polygonen als Teil von Oberflächen - Beispiel: Gradlinien auf der Erde - Schwierigkeit:

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Verkettete Datenstrukturen: Bäume

Punkt-in-Polygon-Suche Übersicht

Computergrafik 1 Übung

Transkript:

3D Programmierpraktikum: Szenegraphen und Praktikum 3D Programmierung Sebastian Boring, Otmar Hilliges Donnerstag, 1. Juni 2006 LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 1 Agenda Organisatorisches Das Konzept der Szenegraphen Grundlagen Beispiel eines Szenegraphen Transformationen zwischen Knoten Allgemeine Vorgehensweise UV-Koordinaten in OpenGL DisplayLists LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 2 Programmierung - SS 2006 1

Organisatorisches Gruppenphase: Gruppen von 3 (max. 4) Studenten Anforderungen an das Projekt: Alle Konzepte der Veranstaltung sind enthalten Gilt auch für Konzepte, die im weiteren Verlauf vorgestellt werden (insb. Bump-Mapping) Das Programm MUSS im CIP-Pool kompilier- und lauffähig sein Wöchentliche Besprechung (Do. 10-12 Uhr) mit einer Präsentation der Gruppe Anschließend wird diskutiert LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 3 Organisatorisches Ablauf des Treffens am Donnerstag: Präsentation der Gruppen mit Diskussion Vorstellen jeweils eines weiteren Konzepts: Kollisionserkennung Bump-Mapping Reflexionen GLSL (Shader Language) LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 4 Programmierung - SS 2006 2

Das Konzept der Szenegraphen Enthält die logische und räumliche Anordnung der darzustellenden Szene Objekt-orientierte Datenstruktur: Directed Acyclic Graph (DAG) Baum (Wurzel enthält gesamte Szene) Besteht aus Objekten und Transformationen Jedes Objekt kann selbst ein Baum sein Vorteil: Transformation eines Objekts beeinflusst auch alle Kind-Objekte LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 5 Das Konzept der Szenegraphen Beispiel: ROOT T Teekanne T Gedeck O Teekanne G Gedeck T Teetasse T Löffel T Zucker O Teetasse O Löffel O Zucker LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 6 Programmierung - SS 2006 3

Das Konzept der Szenegraphen Die Transformationsknoten beinhalten die Transformationsmatrizen bezgl. des übergeordneten Knotens Beziehung von Teekanne zum Löffel: T T gesucht 1, L x T = T x 1, L Teekanne = I T Gedeck T Löffel LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 7 Das Konzept der Szenegraphen Objektkoordinaten: Koordinaten eines Objekts bezgl. des übergeordneten Objektes Beispiel: Koordinaten der Teetasse bezgl. der Koordinaten von Gedeck Weltkoordinaten: Koordinaten eines Objekts bezgl. des Ursprungs des Universums Ursprung = Wurzel des Szenegraphen LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 8 Programmierung - SS 2006 4

Allgemeine Vorgehensweise: Üblicherweise klare Trennung von Programmierer und Grafiker Der Programmierer erstellt Dummy-Texturen und legt diese korrekt auf die einzelnen Polygone Der Grafiker ersetzt die Texturen mit neuen, wobei er sich nicht um die korrekte Ausrichtung kümmern muss LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 9 Beispiele für Dummy-Texturen: LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 10 Programmierung - SS 2006 5

Das Prinzip der UV-Koordinaten: Texturen sind Flächen (2D) Jeder Punkt eines Polygons erhält zusätzlich zu seinen 3 Koordinaten noch die zwei Texturkoordinaten In OpenGL erhalten nur die Eckpunkte UV- Koordinaten. Dazwischen: Interpolation Die Textur hat die Längeneinheit 1 in x- und y-richtung, auch wenn sie nicht quadratisch ist. LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 11 Beispiel für UV-Koordinaten: LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 12 Programmierung - SS 2006 6

Beispiel für UV-Koordinaten: LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 13 in OpenGL: Verwenden der Klasse Texture: Der Konstruktor lädt automatisch die Bitmap und erzeugt drei verschieden gefilterte Texturen: Texture(char* file); Zugriff auf die jeweilige Textur erfolgt über das public Element tex[int filter]: Texture* texture; texture = new Texture( hello.bmp ); glbindtexture(gl_texture_2d, texture->tex[0]); // filter = 0, 1 or 2 delete texture; LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 14 Programmierung - SS 2006 7

Laden mehrerer Texturen geschieht durch mehrere Objekte der Klasse Texture OpenGL vergibt eindeutige IDs für jede geladene Textur (wird alles in der Textur- Klasse erledigt) Ein- bzw. Ausschalten der : void glenable(gl_texture_2d); // turn on texturing void gldisable(gl_texture_2d); // turn off texturing LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 15 Nun muss die Textur gewählt werden, die auf die folgenden Polygone gezeichnet werden soll: void glbindtexture(gl_texture_2d, GLuint texture); Die Textur-ID erhält man von der zugehörigen Textur-Klasse: Texture* texture = new Texture( hello.bmp ); int filter = 1; glbindtexture(gl_texture_2d, texture->tex[filter]); delete texture; LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 16 Programmierung - SS 2006 8

Texturen bleiben solange gültig, bis die abgeschaltet wird oder eine neue Textur gewählt wird Setzen der UV-Koordinaten (vor jedem neuen Vertex): void gltexcoord2f(glfloat u, GLfloat v); LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 17 Setzen der UV-Koordinaten: Texture* texture = new Texture( hello.bmp ); int filter = 1; void display() { glbindtexture(gl_texture_2d, texture->tex[filter]); glbegin(gl_quads); glnormal3f(0.0, 1.0, 0.0); gltexcoord2f(1.0, 0.0); glvertex3f( 1.0, 1.0, -1.0); gltexcoord2f(0.0, 0.0); glvertex3f(-1.0, 1.0, -1.0); gltexcoord2f(0.0, 1.0); glvertex3f(-1.0, 1.0, 1.0); gltexcoord2f(1.0, 1.0); glvertex3f( 1.0, 1.0, 1.0); glend(); } LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 18 Programmierung - SS 2006 9

DisplayLists Sollen viele gleiche Objekte gezeichnet werden (z.b. 100 Asteroiden in einem Spiel), muss der Rechner jedesmal neu zeichnen DisplayLists ermöglichen das kompilieren von einem Objekt Kompilierte Objekte werden komplett im Speicher gehalten und können beliebig oft gezeichnet werden LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 19 DisplayLists Erzeugen von Listen: GLuint glgenlists(glsizei range); Beginnen eines Objekts: void glnewlist(gluint list, GLenum mode); // list = Identifikator der Liste // mode = GL_COMPILE Beenden eines Objekts: void glendlist(); Abrufen einer Liste: void glcalllist(gluint list); LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 20 Programmierung - SS 2006 10

DisplayLists Beispiel (Erzeugen): GLuint list; list = glgenlists(1); glnewlist(boxes, GL_COMPILE); glbegin(gl_quads); glnormal3f(0.0, 1.0, 0.0); gltexcoord2f(1.0, 0.0); glvertex3f(1.0, 1.0, -1.0); gltexcoord2f(0.0, 0.0); glvertex3f(-1.0, 1.0, -1.0); gltexcoord2f(0.0, 1.0); glvertex3f(-1.0, 1.0, 1.0); gltexcoord2f(1.0, 1.0); glvertex3f(1.0, 1.0, 1.0); glend(); glendlist(); LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 21 DisplayLists Beispiel(Abrufen): GLuint list; void display() { // do some transformations glcalllist(list); // do some transformations glcalllist(list); } LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 22 Programmierung - SS 2006 11

Literatur OpenGL Reference Page: http://www.mevis.de/opengl/opengl.html GLUT Man Pages: http://www.cs.uccs.edu/~semwal/man.html LMU München Medieninformatik Boring/Hilliges 3D Programmierpraktikum SS2006 01.06.2006 Folie 23 Programmierung - SS 2006 12