Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Manfred Thaller WS 2011/2012 Stereo-3D-Grafik Linda Scholz
Räumliches Sehen Beide Augen suggerieren räumliche Tiefe Gehirn verarbeitet zwei Bilder aus verschiedenen Blickwinkeln Durch Verschiebung beider Bilder wird die Tiefe berechnet
Tiefenschärfe Vermittelt Realismus Schärfe und Unschärfe setzen den Blickpunkt Größe von Objekten lässt Entfernung von Objekten anmuten
Stereo-3D-Grafik Darstellung von Bildern aus zwei Perspektiven Überlagerung der beiden Anisichten Größere Verschiebung = Entfernung zum Betrachter
Stereo-3D-Grafik Soll das menschliche Auge täuschen Dreidimensionalität von Objekten wird vorgetäuscht
Stereo-3D-Grafik 2 Bilder müssen gerendert werden Jedes Auge darf nur das jeweilige Bild sehen VR-Helme 3D-Shutter-Brillen 3D-Kino-Lösung Rot-Blau/Rot-Grün Stereografie
VR-Helme Virtual Reality Anstelle der Gläser zwei Displays, die separat angesteuert werden Vorteil: sehr gute Qualität Nachteil: Grafikkarte muss Helm unterstützen und jeden Frame doppelt rendern Hohe Kosten
3D-Shutter-Brillen Augen werden abwechselnd verdunkelt Monitor zeigt abwechselnd die Sicht von links und rechts Vorteil: günstige Lösung und gute Bildtrennung Nachteil: Grafikkarte muss Brille unterstützen 50% Helligkeit geht verloren Bildwiederholungsfrequenz muss verdoppelt werden
3D-Kino-Lösung Zwei Projektoren strahlen den Film einmal aus linker Sicht und einmal aus rechter an die Wand Licht der Projektoren unterscheidet sich durch Polarisation Filter in den 3D-Brillen lassen jeweils nur einen Licht-typ durch Technik lässt sich für Computerspiele kaum verwenden Zwei LCD-Projektoren vor die man je einen Polarisationsfilter stellt
Rolt-Blau/Rot-Grün Ein Bild arbeitet mit rotem Licht eines mit blauem oder grünem Bilder werden abwechselnd von links und rechts gezeigt Flackern entsteht Im Bild werden Rot und Blau/Grün kombiniert
3D-Kino-Lösung Vorteil Nachteil Kostengünstig Funktioniert auf fast allen Grafikkarten Einfach zu implementieren Nachteil Eine Farbe geht komplett verloren
Stereografie Auf den ersten Blick undeutliches Bild Durch Verstellung der Augen wird 3D Objekt erkennbar Tiefe der Pixel sind von Bedeutung um ein stereografisches Bild zu berechnen Stereografische Bilder in Echtzeit durch Zugriff auf den Bildpuffer Farbe des Pixels von seiner Tiefe abhängig machen (Pixel-Shader)
Implementierung Renderstate D3DRS_COLORWRITEENABLE Farbkanäle beim Rendern kontrollieren, dass nur roter und grüner Farbkanal geschrieben wird D3DCOLORWRITEENABLE_RED D3DCOLORWRITEENABLE_GREEN
Implementierung Szene beginnen & Puffer leeren D3DRS_COLORWRITEENABLE auf D3DCOLORWRITEENABLE_RED setzen Szene von links rendern (Kamera entlang der X-Achse verschieben) Z- und Stencil-Buffer leeren – nicht Bildpuffer D3DRS_COLORWRITEENABLE auf D3DCOLORWRITEENABLE_BLUE setzen Szene von rechts rendern Szene beenden & Bildpuffer sichtbar machen
Blickpunkt der Kamera Bei Stereo-3D-Grafik sollte sich der Blickpunkt der Kamera bei dem Objekt befinden, das in der Bildmitte zu sehen ist.
Galactica Game.cpp #include "Galactica.h" // Folgendes #define schaltet den 3D-Brillen- Modus ein: // #define _3D_GLASSES_
CGAME::Render #ifdef _3D_GLASSES_ D3D->Clear(0, NULL, D3DCLEAR_TARGET, tbColor(0.0f), 1.0f, 0); for(int i = 0; i < 2; i++) { D3D->Clear(0, NULL, D3DCLEAR_ZBUFFER, tbColor(0.0f), 1.0f, 0); D3D->BeginScene(); if(i == 0) D3D.SetRS(D3DRS_COLORWRITEENABLE, D3DCOLORWRITEENABLE_BLUE); else D3D.SetRS(D3DRS_COLORWRITEENABLE, D3DCOLORWRITEENABLE_RED); // Kamera setzen SetupCamera();
CGAME::SetupCamera #ifdef _3D_GLASSES_ static DWORD dwFrame; if(dwFrame % 2) m_vCameraPos -= tbVector3Cross(tbVector3Normalize(m_vCameraLookAt - m_vCameraPos), m_vCameraUp) * 0.01f; else m_vCameraPos += tbVector3Cross(tbVector3Normalize(m_vCameraLookAt - m_vCameraPos), m_vCameraUp) * 0.01f; #endif
Vielen Dank Schöne Ferien