[D3D9] Nativ Shutterbrillen/HMD unterstützen

Für Fragen zu Grafik APIs wie DirectX und OpenGL sowie Shaderprogrammierung.
Antworten
Benutzeravatar
Zudomon
Establishment
Beiträge: 2276
Registriert: 25.03.2009, 07:20
Kontaktdaten:

[D3D9] Nativ Shutterbrillen/HMD unterstützen

Beitrag von Zudomon »

Huhu!

Ich habe mir eine Z800 von 3D Visor gegönnt, Head Mounted Display. Leider unterstützten NVidias Stereotreiber solche Gerätschaften nur bis GeForce 7, danach supporten die nur noch ihre eigene 3D Vision Shutterbrillen.
Allerdings klappt es so einigermaßen mit den IZ3D Treibern, zumindest für DirectX Spiele. Da ist allerdings das Problem, wenn die Framerate unter den Wiederholfrequenz fällt, kann es sein, dass das Bild für das Linke und Rechte Auge vertauscht sind. Mit einem Knopfdruck lässt sich das aber wieder beheben.

Wie funktioniert das ganze? Soweit ich weiß muss eine Auflösung von 800 x 600 @ 60 Hz gegeben sein. Dann kann man in den Treibern für das HMD einstellen, dass nun die Bilder abwechselnd an die beiden Monitore gesendet werden ( flackerfreies 3D! Wahnsinn!! ).

Nun mein Problem... wie programmiere ich nativen Support? Stereotreiber sind ja eigentlich nur Hacks und keine echten Treiber. Deswegen wird ein nativer Support, in dem man genau programmiert, was für die beiden Bilder gerendert werden soll garantiert besser.
Meine erste Lösung war, einfach jedes Bild abwechselnd auszugeben. Damit habe ich aber dann das gleiche Problem, wie die IZ3D Treiber. Dass bei niedrieger Framerate die Bilder vertauscht werden können. Ich hatte an meinem Zweitrechner das ganze mit StereoTreiber von NVidia unter entsprechnender Grafikkarte am laufen, aber da war das Problem nicht, also dass bei niedriger Framerate die Bilder vertauscht werden.
Meine zweite Lösung war dann, einen HighFrequencyCounter mitlaufen zu lassen und dann anhand der Zeit zu entscheiden, welches Bild gerendert wird. Natürlich ist das alles nicht so ganz trivial, weil ja während des Renderns die Zeit weiter läuft und man dann nicht gewährleisten kann, dass das Bild trotzdem zum richtigen Zeitpunkt ausgespuckt wird. Nun habe ich bei voller Framerate allerdings den Effekt, dass die Bilder abwechselnd richtig falsch richtig falsch, dargestellt werden in Intervallen von schätzungsweise 3 Sekunden.

Kennt sich jemand mit dieser Thematik aus oder kann mir sonst irgendwie einen heißen Tipp geben??

Viele Grüße
Zudo
Benutzeravatar
Krishty
Establishment
Beiträge: 8355
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [D3D9] Nativ Shutterbrillen/HMD unterstützen

Beitrag von Krishty »

Zudomon hat geschrieben:Wie funktioniert das ganze?
Das interessiert mich auch. Mein Eindruck ist, dass es tatsächlich komplett von der API wegabstrahiert wird und das auch schon eine Design-Entscheidung war – wegen des zarten Hinweischen, dass die IDirect3DDevice9::GetBackBuffer()-Methode bewusst Zugriff auf die linke oder rechte Seite des Back-Buffers erlaubt; man bei der Erzeugung des selbigen keine Kontrolle whatsoever hat.
Was ich bisher so in Foren gehört habe geht ebenfalls in die Richtung, dass Stereoprogrammierung tatsächlich nur in OpenGL steuerbar ist und bei allen Direct3D-APIs ausschließlich durch entsprechende Treiber realisiert wird.

Gruß
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Chromanoid
Moderator
Beiträge: 4287
Registriert: 16.10.2002, 19:39
Echter Name: Christian Kulenkampff
Wohnort: Lüneburg

Re: [D3D9] Nativ Shutterbrillen/HMD unterstützen

Beitrag von Chromanoid »

Ihr könntet mal schauen ob Systeme wie VR Juggler DirectX unterstützen und wenn wie die das machen. Damit kann man ja auch 3D Caves usw. betreiben. Aber wahrscheinlich bauen die eher auf mehrere Videoausgänge.
Benutzeravatar
Zudomon
Establishment
Beiträge: 2276
Registriert: 25.03.2009, 07:20
Kontaktdaten:

Re: [D3D9] Nativ Shutterbrillen/HMD unterstützen

Beitrag von Zudomon »

Könnte man eventuell ein VSync machen, aber so, dass er im Hintergrund fleißig weiter rendert?
Also angenommen man hat 180 FPS... bei 60 Hz würde er dann 2 Bilder rendern und verwerfen und jeweils das dritte Bild darstellen.
Antworten