View
50
Download
0
Category
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