Indoor-Rendering Softwaretechnologie II Master of Ceremony: Christian Daum Sidekick: Tanja B. Lange (wofür, zum Henker, steht eigentlich das B.?)

Slides:



Advertisements
Ähnliche Präsentationen
Tipps & Tricks zu benutzerdefinierten Animationspfaden
Advertisements

Sortieren I - Bubblesort -
Kapselung , toString , equals , Java API
Suche in Texten (Stringsuche )
Christian A. Kopf Institut für Informatik FU Berlin Episode Recognizer Framework - Rahmenwerk zur Episodenerkennung.
Kollisionen erkennen Kollisions- und Schnittpunkttests auf Dreieckbasis Kollisions- und Schnittpunkttests auf Viereckbasis Einsatz von achsenausgerichteten.
Sequenzdiagramm.
Gliederung Motivation / Grundlagen Sortierverfahren
Präsentation Designteam. Die Online Anzeige Aufgaben: Ausgabe einer variablen Liste der Online-User Darstellung der Anzahl der Online-User Angabe seit.
Java: Objektorientierte Programmierung
FH-Hof Geometrie Richard Göbel. FH-Hof Aufbau des virtuellen Universums.
Sortierverfahren Richard Göbel.
Sortierverfahren Richard Göbel.
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Objektorientierung
Ein Beispiel in Java.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
Dynamische Programmierung (2) Matrixkettenprodukt
WS Algorithmentheorie 08 – Dynamische Programmierung (2) Matrixkettenprodukt Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (27 – Kürzeste Wege) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Processing: Arrays & Laden von Dateien Aufbauend auf dem Beispiel: File I/O LoadFile1.
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
Produktform der Inversen 1
Java3d „Licht und Material“
Diskrete Mathematik I Vorlesung Arrays-
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
Minimum Spanning Tree: MST
Command Pattern Karola Schäuble,
DVG Klassen und Objekte
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Prof. Dr. Gerhard Schmidt pres. by H.-J. Steffens Software Engineering SS 2009Folie 1 Objektmodellierung Objekte und Klassen Ein Objekt ist ein Exemplar.
FHP - Fachbereich Bauingenieurwesen
Computergraphik mit OpenGL Einführung. Bilder Objekt existiert im Raum unabhängig vom Betrachter Objekte sind beschrieben durch die Position verschiedener.
Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung Prof. Dr. Manfred Thaller AM 3 Übung: Softwaretechnologie.
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Gleichungen und Gleichungssysteme
Einführung in die Programmiersprache C 4
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Dynamische Datentypen
Vom Kontext zum Projekt V Carina Berning Sabrina Gursch Pierre Streicher Intelligente Dateisysteme.
7.3.1 Ein Modellierungsbeispiel (1|9)
Aufgaben Version 1: Es soll eine Wetterstation mit folgenden zwei Anzeigen implementiert werden: Aktuelle Wetterbedingungen mit Temperatur und.
Vortrag: Visual Basic Neuerungen Autor : Dennis Hoyer
LOD Levels of Detail Oliver Gassner Christian Troger.
Vortrag: Frames & Javascript.
Das Traveling Salesman Problem (TSP)
Universität zu Köln WS 2014/15 HKI – Softwaretechnologie 2 (Teil 1) Von Tilo Kochs.
A Workshop About this chapter General description Units Time Schedule
Multimedia und Virtual Reality Vorlesung am Martin Kurze Multimedia in 3D.
Diskrete Mathematik I Vorlesung 2 Arrays.
Java-Kurs Übung Besprechung der Hausaufgabe
Einführung in die Programmierung mit Java
Game Loop & Update Method Robert Nystrom – Game Programming Patterns Universität zu Köln Historisch-Kulturwissenschaftliche Informationsverarbeitung SS.
Programmiersprachen II Fortsetzung Datenstrukturen Hashing Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Funktionen, Felder und Parameter- übergabe. Funktionsaufruf mit Feld als Parameter: Parameter = Name des Feldes.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Lineare Optimierung Nakkiye Günay, Jennifer Kalywas & Corina Unger Jetzt erkläre ich euch die einzelnen Schritte und gebe Tipps!
Tutorium Software-Engineering SS14 Florian Manghofer.
Ein Spiel mit der SDL - Teil I. Ein Spiel mit der SDL  kostenlose Bibliothek – Simple DirectMedia Layer Grafik darstellen Benutzereingaben abfragen Sounds.
Felder in der Informatik
 Präsentation transkript:

Indoor-Rendering Softwaretechnologie II Master of Ceremony: Christian Daum Sidekick: Tanja B. Lange (wofür, zum Henker, steht eigentlich das B.?)

Hohe Anforderungen – Lösung: Portalsysteme An das Indoor-Rendering sind hohe Anforderungen geknüpft: oZahlreiche Innenräumen mit hohem Detailreichtum sollen Frame für Frame fix gerendert werden Problem: Extremer Rechenaufwand Lösung: Sichtbarkeitstest auf Basis von Betrachterposition (im Dungeon) und Blickrichtung (im Raum) oAuf dieser Grundlage: Klassifikation von Wänden und Räumen in... >... nicht sichtbar (Sichtbarkeitstest überflüssig) >... potentiell sichtbar (Sichtbarkeitstest notwendig) oLogo: Zuerst werden Sichtbarkeitstests für potentiell sichtbare Räume durchgeführt, bevor man Tests für deren potentiell sichtbaren Wände anschließt! Problem: Was tun mit – z.B. – L-förmigen Räumen? oGrund: hier ist es möglich, dass von einem Ende des Raumes Wände (oder gar weitere Räume) potentiell sichtbar sind – die vom anderen Ende des L-förmigen Raumes nicht sichtbar sind Lösung: Portalsysteme oAlso Unterteilung solcher Räumen in Sektoren (sprich: künstliche neue Sub-Räume) o& erneute Klassifizierung der Wände auf Basis von Betrachterposition & Blickrichtung >Portal: Der jeweilige Übergang zwischen den Sektoren Funktionsweise eines solchen Portalsystems: 1. Sichtbarkeitstest für alle potentiell sichtbaren Portale (und damit der dahinter liegenden Sektoren) 2. Sichtbarkeitstest für alle potentiell sichtbaren Wände dieser Sektoren

Entwicklung eines Indoor-Renderers 1.Dateiformat zum schnellen Aufbau eines Indoor-Szenarios Speichern der Texturen Speichern des Indoor-Szenarios oComponents: Definition und Verwendung der Bauteil-Geometrien (also Drei- & Vierecke für Wände, Decken & Böden). oDefinition der Portale oDefinition der Sektoren 2.Speichern der Lichtquellen 3.Globale Variablen 4.Klassen, Strukturen & Funktionen Überblick & Strukturentwürfe

Entwicklung eines Indoor-Renderers 1. Dateiformat zum schnellen Aufbau eines Indoor-Szenarios. Alle relevanten Daten des Indoor-Szenarios (Components, Sektoren, Portale) werden in der Datei Interieur.txt gespeichert (s. Folgecharts) Die Texturen der Components finden sich hingegen in IndoorTextures.txt Enthält alle Pfade der verwendeten Texturen:

Entwicklung eines Indoor-Renderers 1. Dateiformat zum schnellen Aufbau eines Indoor-Szenarios. Speichern des Indoor-Szenarios – Components Ein Indoor-Szenario setzt sich vollständig aus 3- & 4eckigen Bauteilen (sog. Components zur Darstellung von Wänden, Decken & Böden) zusammen Definition 4eckiger Components (erfolgt wohl immer zuerst): Logo: durch Definition der Vertices Zusätzlich jedoch: Angabe der Anzahl der Vertices Notwendigkeit: für die Berechnung der Lichteinflüsse notwendig, da hierfür die Vertices allein nicht ausreichen Arbeitsweise: Bei Programmbeginn wird für jedes Bauteil auf Basis dieser Angaben ein Vertexgitter interpoliert (später mehr...) Definition 3eckiger Components: Logo: durch Definition der Vertices Jedoch wird auf eine Interpolation eines Vertexgitters verzichtet Falls ein solches trotzdem gewünscht sein sollte: Definition eines 4eckigen Bauteils wie oben – jedoch müssen dann 2 Eckpunkte mit identischen Koordinaten definiert werden

Entwicklung eines Indoor-Renderers 1. Dateiformat zum schnellen Aufbau eines Indoor-Szenarios. Speichern des Indoor-Szenarios – Components Beispiel (s. Interieur.txt ):

Entwicklung eines Indoor-Renderers 1. Dateiformat zum schnellen Aufbau eines Indoor-Szenarios. Speichern des Indoor-Szenarios – Portale: Definition der Portale: Definition der Portal-Vertices Angabe des zugehörigen Ziel-Sektors (... in den man gelangt, wenn man das Portal durchschreitet)

Entwicklung eines Indoor-Renderers 1. Dateiformat zum schnellen Aufbau eines Indoor-Szenarios. Speichern des Indoor-Szenarios – Definition der Sektoren I: Definition der Point-Lights (zwecks Grundausleuchtung des Sektors) Definition der Sektor-Bauteile (also Anzahl & Nr. der den Sektor definierenden Components); Notwendigkeit: Kollisionstests mit Wänden Höhenbestimmung des Betrachters (Entfernung zum Fußboden) Definition der Sektor-Portale (also Anzahl & Nr. der aus dem Sektor hinausführenden Portale) Daraufhin Sichtbarkeitstest-Frequenz für jedes dieser Portale: Sequenz beginnt beim jeweiligen Sektor-Portal und checkt, ob dahinter liegende Räume sichtbar sind oder nicht (bei geöffnetem / nicht geöffnetem Portal etc.) Sequenz endet, wenn alle Portale abgearbeitet sind und/oder bei negativem Sichtbarkeitstest

Entwicklung eines Indoor-Renderers 1. Dateiformat zum schnellen Aufbau eines Indoor-Szenarios. Speichern des Indoor-Szenarios – Definition der Sektoren II: Definition der potentiell sichtbaren Bauteile (also Anzahl, Nummer & Sektorzugehörigkeit) Auch VSD genannt (Visible Surface Determination = Bestimmung der sichtbaren Oberflächen) Meint das Rendering einer Szene mit möglichst wenig Overdraw (s.u.) Zuerst Angabe (& Rendering) der nicht-transparenten Bauteile in Front2Back-Order Danach Angabe (& Rendering) der transparenten Bauteile in Back2Front-Order Grund: Performancegewinn & bessere Darstellung durch Verringerung des Overdraws beim Rendering Overdraw-Wert: Definiert die Anzahl an Schreibvorgängen im z-Buffer Durch Front2Back-Order wird der Overdraw-Wert auf ein Minimum reduziert Back2Front: Der z-Buffer wird i.d.R. vollständig mit dem größten vorkommenden Tiefenwert initialisiert. Hat ein Polygon einen geringeren Tiefenwert als der z-Buffer, wird der ursprüngliche z-Buffer-Wert überschrieben (Overdraw) = Performance- intensiver Vorgang Front2Back: Wird der z-Buffer stattdessen mit den jeweils niedrigeren Tiefenwerten initialisiert, entfällt der Overdraw jedesmal dann, wenn das entsprechende Polygon einen höheren Tiefenwert hat, als der z-Buffer (da das Polygon dann ohnehin nicht sichtbar wäre) = weniger Schreibvorgänge

Entwicklung eines Indoor-Renderers 1. Dateiformat zum schnellen Aufbau eines Indoor-Szenarios. Speichern des Indoor-Szenarios – Definition der Sektoren III: Beispiel Definition Sektoren

Entwicklung eines Indoor-Renderers 2. Speichern der Lichtquellen Bis dato wurden die Lichtquellen in der Klasse C3DScenario gespeichert … Doch damit ist jetzt Schluß – um nicht zu sagen: Ab sofort wird zum Speichern der Lichtquellen ein globales Array (vom Typ D3DLight9 ) verwendet! Grund (na?): Globaler Zugriff auch außerhalb dieser Klasse! ZÄSUR!

Entwicklung eines Indoor-Renderers 3. Globale Variablen:

Entwicklung eines Indoor-Renderers 4. Überblick Klassen, Strukturen & Funktionen Eben jene sind allesamt in der Datei Indoor.h implementiert: Klasse/MethodeFunktion/Zweck CSektor_Portal_Zuordnung Zuordnung des jeweils zugehörigen Portal-Sektors (mittels der Variablen Sektor-Nr. & Portal-Nr.) CList_of_Sektor_Portal_Zuordnung Initialisiert ein Array vom Typ CSektor_Portal_Zuordnung (Array wird für Portal-Sichtbarkeits-Testfrequenz verwendet) CBauteil_Sektor_Zuordnung Benötigt für Sichtbarkeitstest & Rendern potentiell sichtbarer Bauteile (mittels der Variablen Sektor-Nr. & Bauteil-Nr.) CPortal Speichern von Portal-Eigenschaften (Vertices & Sektor-Nr. d. Portal-Sektoren); Initialisierung einer CQuad -Instanz (zwecks Portaldurchtrittstest – s. CSektor ); Portalsichtbarkeitstest (Portalmittelpunkt & -Vertices werden auf potentielle Sichtbarkeit überprüft) CIndoorTextures Verwaltet die Texturen des Indoor-Secenarios CBauteil Initialisierung, Verwaltung & Darstellung der Components (1. Arbeitspferd des Indoor-Renderers: Interpolation v. Vertexgittern; Kollisionstests Bauteil Spieler; Rendern der Bauteile) CSektor Initialisierung & Verwaltung der Sektoren (2. Arbeitspferd des Indoor-Renderers: Initialisierung v. Lichtquellen, Bauteil-, Portal- & Sektor-Listen des Sektors; Kollisions- & Sichtbarkeit- & Portaldurchtrittstests; Sektor-Rendering; CInterieur Die oberste Instanz des Indoor-Renderers & Schnittstelle zu C3DScenario Initialisierung aller Bauteile, Portale & Sektoren C3DScenario Oberste Instanz des 3D-Scenarios (Initialisiert & zerstört eine CInterieur Instanz; Rendert die Indoor-Scene) Init3DScenario() & CleanUp3DScenario() Initialisierung & Zerstörung des C3DScenario -Objekts

Entwicklung eines Indoor-Renderers 4.Überblick Klassen, Strukturen & Funktionen – C3DScenario : Passt hier nicht hin, deshalb nur die Highlights der Methode New_Scene() : a) Kollisions- & Höhentest mit Wänden & Böden des aktuellen Spieler-Sektors Kollisionstest erfolgt u.a. auf Basis von ViewFieldBorder-Matrizen (Matrizen wurden zuvor im C3DScenario-Konstruktor initialisiert) Kollision (mit Wand/Boden): Frame-Bewegung des Spielers wird rückgängig gemacht b) Alle Sektoren auf nicht-sichtbar zurücksetzen (vorbereitend auf die nachfolgenden Tests) c)Portaldurchtrittstests (mit Portalen des Spieler-Sektors) d)Portalsichtbarkeitstest (für potentiell sichtbare Sektoren) e) Szenario-Welttransformation (gemäß inverser Spielerbewegung – notwendige Daten: x- & z-Koordinaten des Spielers & Fußbodenhöhe) f) Interieur-Rendering (realisiert die Darstellung aller sichtbaren Wände; vor dem eigentlichen Rendern wird dabei für jedes potentiell sichtbare Bauteil ein Sichtbarkeitstest durchgeführt)

Entwicklung eines Indoor-Renderers 4.Überblick Klassen, Strukturen & Funktionen – CBauteil : Interpolation eines Vertexgitters Notwendigkeit (bereits angesprochen – ERINNERT EUCH!): Zur korrekten Berechnung der Lichteinflüsse auf Components Berechnung in 2 Schritten (Details s. Folgechart): 1.Berechnung der Vertexpositionen 2.Berechnung der zugehörigen Texturkoordinaten Nur ein warnendes Zitat vorweg:

Entwicklung eines Indoor-Renderers 4.Überblick Klassen, Strukturen & Funktionen – CBauteil : Interpolation eines Vertexgitters

Entwicklung eines Indoor-Renderers 4.Überblick Klassen, Strukturen & Funktionen – CBauteil : Ein Bauteil initialisieren (Code zu lang -> deshalb s. dort): Mittels der Methode Init(FILE *pfile) Erzeugung des Index- & Vertexbuffers Interpolation des Vertexgitters Kollisionstest Spieler Bauteil Mittels der Methode Test_Collision() Kollisionstest Spieler Wand (mittels Test_for_point_Collision_Wall() – s. Tag 7) Höhentest Spieler Fußboden (mittels Test_For_Ray_Intersection_Terrain() – dito) Idealer Kollisionstest checkt 10 verschiedene Kollisionssituationen ab: Spieler läuft frontal/rückwärts/ (halb) rechts/(halb) links gegen eine Wand etc. Bewegungsfreiheit des Spieler nach dem Kollisionstest: Hängt von Art der Kollision ab: Ist der Spieler gegen die rechte Wand gerauscht – kann er sich auch nicht mehr nach rechts drehen etc.

Entwicklung eines Indoor-Renderers 4.Überblick Klassen, Strukturen & Funktionen – CSektor : Einen Sektor initialisieren (Code zu lang -> deshalb s. dort): Mittels der Methode Init_Sektor(FILE *pfile) Initialisierung aller Lichtquellen des Sektors Initialisierung einer Bauteil-Liste des Sektors (zwecks Kollisionserkennung)... Liste potentielle sichtbarer Portale (zwecks Portaldurchtrittstest)... Liste potentiell sichtbarer Sektoren inkl. der zugehörigen Portale (zwecks Portal-Sichtbarkeits-Testfrequenz)... Liste potentiell sichtbarer Bauteile inkl. der zugehörigen Sektoren (zwecks Bauteil-Rendering) Sektor-Funzel an-/ausschalten Mittels der Methoden Licht_anschalten() & Licht_ausschalten() Beide Methoden beziehen sich auf potentiell sichtbare Sektoren Licht_anschalten() erfolgt VOR & Licht_ausschalten() NACH dem Rendern der Bauteile Jedoch Obacht: Die Lichtquellen-Positionen müssen entsprechend der inversen Spielerbewegung transformiert werden!

Entwicklung eines Indoor-Renderers 4.Überblick Klassen, Strukturen & Funktionen – CSektor : Portal-Sichtbarkeits-Testfrequenz: Potentiell sichtbare Sektoren auf deren Sichtbarkeit hin checken (Code zu lang -> deshalb s. dort): Mittels der Methode VisibilityTest_with_potential_visible_Sectors() Führt für jedes sichtbare Sektor-Portal einen solchen Test durch Portal-Durchtrittstest Mittels der Methode Test_Portal_Durchtritt() Führt für jedes Sektor-Portal einen Durchtrittstest durch Stützt sich dabei auf die gleichnamige CQuad -Methode Sektor-Rendering Mittels der Methode Render() Führt Sichtbarkeitstest durch Darstellung aller potentiell sichtbaren Bauteile eines sichtbaren Sektors

Entwicklung eines Indoor-Renderers 4.Überblick Klassen, Strukturen & Funktionen – CInterieur : Methoden von CInterieur : Test_Collision_with_SectorComponents() Veranlasst Kollisionstest Spieler Spieler-Sektor-Bauteile Turn_Back_List_of_visible_Sectors() Zurücksetzen aller Sektoren auf invisible Test_Portal_Durchtritt() Veranlasst Portaldurchtrittstest für alle Spieler-Sektor-Portale Sektoren_Visibility_Test() Veranlasst Sichtbarkeitstest aller potentiell sichtbaren Sektoren Render_Interieur() Schaltet Lichtquellen aller sichtbaren Sektoren ein Veranlasst Sichtbarkeitstest für potentiell sichtbare Bauteile Schaltet Lichtquellen nach dem Rendern der Bauteile wieder aus