cool IT Team-Blog

Stereoskopie und WPF 3D

Wir haben eine WPF - Lösung gebaut, die eine 3D Szene mit WPF 3D (in einem Viewport3D) enthält. Wir wollten nun diese Szene stereoskopisch betrachtbar machen.

Die Technik dahinter sollte folgende sein:

 3D-Brille

  • Wir haben eine GeForce- Grafikkarte, die NVIDIA 3D Vision unterstützt.
  • Wir haben einen Bildschirm mit 120hz Taktfrequenz.
  • Wir haben eine coole 3D-Shutter-Brille.
Nun sollte das Ganze so funktionieren, dass eine Applikation, die im Direct3D-Fullscreen - Mode läuft, von der NVIDIA-Software am PC stereoskopisch geschaltet werden kann. Wir haben viele, viele Direct3D Samples ausprobiert - funktioniert super. Vor allem die Beispiele im NVIDIA SDK schauen teilweise toll aus.

Nun war die Idee, WPF 3D "einfach" in den Fullscreen Mode zu schalten und alles andere läuft dann automatisch. Das Problem dabei: Das wird offiziell nicht unterstützt.

Nun haben wir probiert, das Direct3D device dahinter zu fassen zu bekommen (basierend auf http://buzzgamesnews.blogspot.com/2010/06/...s-internal.html - ja, ja, schlimmer Hack - aber wir hatten keine bessere Idee!) und dann die D3DPRESENT_PARAMETERS dann Fullscreen zu schalten, etwa so:

ZeroMemory(&g_pd3dpp, sizeof(g_pd3dpp)); // clear out the struct for use
g_pd3dpp.Windowed = FALSE;
g_pd3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
g_pd3dpp.hDeviceWindow = windowHandle;
g_pd3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE;
g_pd3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; // set the back buffer format to 32-bit
g_pd3dpp.BackBufferWidth = sz.cx; // set the width of the buffer
g_pd3dpp.BackBufferHeight = sz.cy;
// set the height of the buffer

Aber die bittere Erkenntnis ist, dass der Bildschirm schwarz ist, sobald die Applikation wirklich Fullscreen wird. Andere Adaptionen der Parameter und auch ein ResetDevice beeindrucken WPF nicht, aber im Fullscreen Mode kann WPF einfach nicht mehr zeichnen, weil das Device im Fullscreen Mode offensichtlich exklusiv geschaltet wird und WPF dann keinen Zugriff mehr hat.

Dann hatten wir noch eine andere Idee:

Würden die beiden Bildhälften, die dann zusammengesetzt werden, dem Applikationsentwickler einfach als doppelt breiter Bildschirm angeboten, könnte er die beiden Bildhälften nebeneinander zeichnen. Hätte natürlich den Nachteil, dass die Parallaxe (die Verschiebung des Augenabstands) nicht mehr so leicht automatisch verschoben werden könnte, sondern vom Programm berechnet werden müsste, aber das wäre kein Problem (unsere Applikation kann schon Anaglyphen).

Geht scheinbar auch nicht.

Schade, und was nun? Weitere Ideen sind herzlich willkommen!

Ist gar nicht cool, oder?

LG,
Sabine.

Verfasst: 09.03.2011 22:51:18 von Sabine Stiller
Tags: 3D Vision, Direct3D, Fullscreen, NVIDIA, Steroskopie, WPF, WPF3D

1


Kommentare
Sabine Stiller
Laut einer mittlerweile eingetroffenen Antwort unseres Microsoft Consultants, ist es definitv NICHT möglich, eine WPF-Anwendung Fullscreen zu schalten. Daher ist auch die Stereoskopie in der oben genannten Form NICHT möglich. Sehr schade!

"WPF does not have a full-screen mode. A maximized window, without borders, is probably the closest you will get." - so heißt es.
10.09.2011 17:08:05

Georg Reh
Hallo Neidhard!

Nvidia nutzt Silverlight um ein 3D-Video zu streamen. Hier wird kein 3D-Objekt dargestellt. Das 3D-Video wird dann von einem lokal installierten Codec auf 3D-Vision fähigen Systemen dargestellt.
08.08.2011 14:27:35

Sabine Stiller
Hallo Neidhard!

Vielen Dank für den Hinweis! Das ist wirklich sehr interessant. Sobald ich herausgefunden habe, wie die das gemacht haben, gibt es ein Update!

Eines ist jedenfalls sicher: WPF3D kann nicht die Basis für diese Applikation sein. Denn Silverlight 4 unterstützt WPF3D nicht (übrigens auch Silverlight 5 nicht, dort gibt es aber eine neue XNA-Schnittstelle).
04.08.2011 16:01:27

Neidhard
http://www.3dvisionlive.com/3d_video/fear-3-3d-game-play-preview-download-and-stream-real-3d-www3dizzy-commp4
04.08.2011 13:16:34

Neidhard
Scheut Euch mal die 3DLive-Seite von Nvidia an. die benutzen Silverlight für die Anzeige, was ja eigentlich auch WPF ist. Irgendwie muss es gehn.
04.08.2011 13:11:12

Einen Kommentar schreiben



 Security code