Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung

Preview:

DESCRIPTION

Fortgeschrittene Techniken (750 – 755): Stereo-3D-Grafik - Raumaufteilung - Light-Mapping. Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung Prof . Dr. Manfred Thaller AM 3 Übung: Softwaretechnologie II Teil 1: Simulation und 3D-Programmierung - PowerPoint PPT Presentation

Citation preview

Universität zu KölnInstitut für Historisch-Kulturwissenschaftliche InformationsverarbeitungProf. Dr. Manfred ThallerAM 3 Übung: Softwaretechnologie II Teil 1: Simulation und 3D-ProgrammierungWS 2010/2011

Dennis Kiewning

Fortgeschrittene Techniken (750 – 755):

Stereo-3D-Grafik - Raumaufteilung - Light-Mapping

Stereo-3D-Grafik 9.4

Prinzip:

• Trennen der Bilder : Zwei Bilder rendern

• Zwei Bilder mit Rot und Blau kombinieren: Rot/BlauFilter (Brille)

Vorteile:

• Kostengünstig• Funktioniert mit (fast) jeder Grafikkarte• Einfach zu implementieren

Nachteil:

• eine Farbe geht komplett verloren: - bei Rot-Blau: Grün - bei Rot-Grün: Blau

Implementierung:

• Render-State D3DRS_COLORWRITEENABLE kontrolliert, welche Farbkanäle beim Rendern geschrieben werden und welche nicht:

1) Szene beginnen und alle Puffer leeren

2) D3DRS_COLORWRITEENABLE D3DCOLORWRITEENABLE_RED

3) Die Szene von links rendern

4) Z- und Stencil-Buffer leeren

5) D3DRS_COLORWRITEENABLE D3DCOLORWRITEENABLE_BLUE

6) Die Szene von rechts rendern

7) Szene beenden und den Bildpuffer sichtbar machen

Stereo-3D-Grafik 9.4

Beispielprogramm:

• Galactica unterstützt 3D-Brillen:

#define _3D_GLASSES oben in die Datei GAME.CPP schreiben

Stereo-3D-Grafik 9.4

Raumaufteilung 9.5

• Bisher standen Spielfiguren und bewegliche Objekte im Mittelpunkt.

• Andere Spieltypen werden allerdings häufig durch ein statisches Objekt – den „Level“ – eingenommen.

Problem:

• Solche Objekte besitzen viel mehr Dreiecke als jedes andere Objekt.

Lösung:

• Rekursives Rendern!

Rekursives Rendern:

• Modell aufteilen und nur sichtbare Teile rendern: - BSP (Binary Space Partition)

- Generieren eines Octrees

Grundprinzip:

„Man hat den Level rekursiv unterteilt, und man kennt die Bounding-Box oder die Bounding-Sphere jedes einzelnen Teils (Knotens). Das Rendern erfolgt nun ebenfalls rekursiv.“

Raumaufteilung 9.5

void RenderNode(Node* pNode) {

// Ist der Knoten sichtbar? if(tbBoxVisible(pNode, g_aViewFrustum)) {

// Ja, er ist sichtbar! // Wenn es ein Endknoten ist, rendern wir seine Dreiecke.

if(pNode->bIsLeaf) {

// Effekt starten // ... // Rendern g_pD3D->SetStreamSource(...); g_pD3D->SetIndices(...); g_pD3D->DrawPrimitive(...);

} else {

// Es ist kein Endknoten! // Nun rufen wir rekursiv die Unterknoten auf.

for(int i = 0; i < pNode->iNumChilds; i++) { // Unterknoten rendern RenderNode(pNode->apChild[i]); }

} } }

Raumaufteilung 9.5

Rekursives Rendern:

(Bounding-Box)

PVS und Portale:

• Auch mit BSP-Trees oder Octrees muss die Grafikkarte immer noch viele „überflüssige“ Dreiecke rendern.

Lösung:

• PVS –Potencially Visible Set: Eine Liste, die alle Knoten eines Baums enthält, die potenziell sichtbar sind:

- Funktioniert bei Indoor-Levels - Türen die Räume verbinden = Portale

Raumaufteilung 9.5

Raumaufteilung 9.5

PVS und Portale:

• Erstellen eines neuen Sichtbereich: ein neues View-Frustum

• Vor dem Rendern eines Knotens prüfen, ob er sich im neu generierten Sichtbereich befindet.

Vorteile:

• Große Teile des Levels „wegcullen“

• Rendern dynamischer Objekte außerhalb des Sichtfelds sparen

Light-Mapping 9.5.3

Light-Mapping:

• Grundgedanke: Lichtquellen reduzieren

• Textur, die lediglich die Beleuchtung eines Dreiecks darstellt

• Diffuse und Lightmap werden über den Operator D3DTOP_MODULATE verbunden

Light-Mapping 9.5.3

Light-Maps generieren:

1) Lohnt es sich eine Light-Map anzufertigen?

2) Größe der Light-Map für jedes Dreieck festlegen: Light-Map-Texel durchsuchen und dessen Beleuchtung berechnen

Ray-Tracing (Radiosity)

3) Light-Maps in einer großen Textur zusammenfassen:verringert beim Rendern den Aufruf von SetTexture

Wichtig:

• Vertizes der Dreiecke brauchen jeweils zwei Texturkoordinatenpaare: Diffuse + Lightmap

Die TriBase-Klasse tbOctree 9.5.4

Die TriBase-Klasse tbOctree:

• Übergabe einer Modelldatei

• Anschließende Umwandlung in einen BSP-Tree oder einen Octree

• tbOctree-Klasse zum Rendern des Octrees verwenden

Recommended