Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Mai 14, 2024 20:16

Foren-Übersicht » Programmierung » Shader
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Versetzte Kamera durch Shader?
BeitragVerfasst: Sa Dez 19, 2009 11:13 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ist es möglich/Performant, einen Shader zu schreiben, welcher die Szene 2x aus unterschiedlichen Positionen rendert?

Ich frage dies, weil man dann dadurch reales 3D mittels Stereographie erzeugen kann.

Man muss die Szene nur 2x rendern. Einmal von Position A aus und dann von Position B wobei B einfach 20cm auf der X-Achse verschoben ist.

Die beiden Ergebnisse zeigt man dann nebeneinander auf dem Bildschirm. (Der Bildschirm ist quasi gesplittet)

Wenn man dann die so durch den Bildschirm "hindurch"schaut, dass jedes Auge nur eines (und zwar das diesem Augen entsprechende) der Beiden Bilder sieht, macht das Gehirn daraus dann einen realistischen 3D Eindruck.

Mit einem solchen obengenannten Shader könnte man jede 3D Anwendung zum "Real 3D" umbauen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Versetzte Kamera durch Shader?
BeitragVerfasst: Sa Dez 19, 2009 11:25 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
So einfach ist das glaub ich nicht. Ich denke man müsste den Blickmittelpunkt vorher errechnen und die beiden Kameras darauf ausrichten. Eine etwas nach links versetzt von der Betrachterposition und eine etwas rechts. Allerdings müste man dafür davon ausgehen, das der User auch immer auf den Mittelpunkt des Bildschirms schaut, damit der Fokus auch stimmt. Für unbewegte Bilder klappt das aufjedenfall sehr gut, da hab ich das schonmal ausprobiert.

Interessant wäre, ob man das mit dem Headbacktracking verbinden könnte. Das wäre verdammt cool. Achja.. wie das in einem Shader funktioniert weiß ich nicht :)

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Versetzte Kamera durch Shader?
BeitragVerfasst: Sa Dez 19, 2009 11:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Also die entsprechende Matrix erhältst du mit gluLookAt. Die gesamte Szene wird einfach zweimal gerendert, wobei der Unterschied einfach nur in einer leicht anderen View-Matrix liegt.

Ich vermute aber du willst das in einem Pass rendern, richtig? Das wäre auch möglich, du brauchst aber einen Geometryshader. Der Vertexshader macht einfach gar nichts, er gibt nur die Vertexattribute an den Geometryshader weiter. Der Geometryshader bekommt beide ModelViewProjection-Matrizen als Uniform und dupliziert jedes Dreieck: Einmal mit der linken MVP-Matrix, einmal mit der rechten Matrix. Jede Seite wird in ein eigenes Layer (siehe eingebaute Variable gl_Layer) geschrieben. Am Ende hast du beide Bilder in einem FBO. Diese kannst du dann entsprechend weiterverarbeiten.

Wenn du beide Bilder sowieso zusammenfügst (Rot/Grün-Filter oder sowas) könnte man auch direkt in ein einziges Layer rendern und den entsprechenden Filter direkt anwenden. Könnte aber Probleme mit dem Z-Buffer geben.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Versetzte Kamera durch Shader?
BeitragVerfasst: Sa Dez 19, 2009 15:10 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Flash hat geschrieben:
Einmal von Position A aus und dann von Position B wobei B einfach 20cm auf der X-Achse verschoben ist.

Sind deine Augen 20cm voneinander entfernt? :wink:

Mir würde aber auch nur die Variante von Coolcat einfallen. Allerdings frage ich mich ob man wirklich so schlechte Hardware haben kann, das man das in einem Pass machen muss. Besonders weil die Bilder eine relativ kleine maximale Größe haben. Das liegt daran das der Mensch (zumindest die meisten) ihre Augen nicht weiter als parallel von einander entfernen können. Also ich mein die Blickrichtung ist parallel. Das begrenzt die Bilder links und rechts auf ein paar cm. Wahrscheinlich auf den Abstand zwischen den Augen.
Für die Rot/Grün Variante gilt das natürlich nicht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Versetzte Kamera durch Shader?
BeitragVerfasst: Mo Dez 21, 2009 14:12 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Schläfer: Da hast du natürlich recht. Wenn man vor einem 15Zoll Notebook sitzt ist der Halbe Bildschirm schon zu groß. Man müßte ca. 1-1,5m vom Bildschirm weg rutschen um diese Größe zu "verkraften".

Wegen dem Abstand. Ich habe Bilder von München mit dieser Methode gemacht, allerdings haben die Bilder einen Abstand von ca. 2m! Das hat einen ziemlich coolen Effekt zur Folge: Die Stadt sieht aus wie ein Modell. Das liegt daran, dass das Hirn alles um den Faktor klein zoomt bis der Bildabstand gleich dem Augenabstand ist.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Versetzte Kamera durch Shader?
BeitragVerfasst: Mo Dez 21, 2009 16:21 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Es gibt ja 2 Möglichkeiten wie man mit der Technik stereoskopisch Sehen kann. Entweder man schaut überkreuzt oder parallel.
Bei ersterem gibt es vielleicht nicht diese Beschränkung der Größe. Bei letzterem aber schon. Außerdem ist es da unabhängig von der Entfernung zum Monitor, was ja auch logisch ist. Die Bilder liegen nebeneinander, die Augen sollten am besten zentriert über den Bildern sein. Logischerweise können sich die Bilder auch nicht überlappen. Das linke Bild könnte zwar nach links unbegrenzt weiter gehen, aber da sich das rechte Auge auch bewegt, wenn man ein bischen nach links schaut, würde es irgendwann die Grenze zum linken Bild überschreiten, wodurch der 3D-Effekt verloren geht. Für das rechte Bild gilt das dann auch entsprechend.
Das war das was ich oben meinte. An das mit dem Überkreuzschauen hatte ich noch nicht gedacht.

Ich hab' auch mal gelesen das man ab ca. 1km nicht mehr dreidimensional Sehen kann. Mit dem größeren Abstand der Kamerabilder kann man das vielleicht ausgleichen. Aber für nahe Objekte wäre das dann wohl nicht mehr geeignet.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Versetzte Kamera durch Shader?
BeitragVerfasst: Di Dez 22, 2009 17:58 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich hab gerade mal den "Kreuzblick" probiert. Das fällt mir schwerer...das Bild erscheint kleiner und am Anfang auch deutlich verschwommener.

Im Anhang mal ein Fotografisch aufgenommenes Bild um es selbst zu testen.
Das ist eine meiner Lieblings-3D Szenen, da sie bis >4 Tiefenebenen hat. 8)


Dateianhänge:
Dateikommentar: Enthält 2 Bilder eines Innenhofs zum Testen des Stereographischen 3D Effekts.
Innenhof_3D.zip [1.13 MiB]
312-mal heruntergeladen

_________________
Blog: kevin-fleischer.de und fbaingermany.com
Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.042s | 18 Queries | GZIP : On ]