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

Aktuelle Zeit: Fr Jul 18, 2025 08:44

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



Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: "Dynamisches" Environment Mapping
BeitragVerfasst: Di Dez 16, 2003 17:11 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 29, 2002 13:24
Beiträge: 91
Wohnort: Oberhausen (NRW)
Hi. Wie könnte man "dynamisches" Environment Mapping realisieren? Ich habe z.B. Wasser und will da drauf die Umgebung spiegeln, ohne eine festgelegte Textur zu benutzen, also wie bei HL². Hat da jemand eine Idee?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 16, 2003 17:14 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Sowas geht eigentlich am besten über eine dynamische Cubemap, gepaart mit nem Vertex- und nem Fragmentprogramm. Aber besonders einfach ist das nicht, und das Aktualisieren der sechs Cubemap-Flächen ist auch sehr performanceraubend. Evtl. solltest du zuerst mit ner statischen Reflektion von z.B. deiner Skybox vorlieb nehmen.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 16, 2003 17:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Nebenbei erkennt man auch nicht immer das was gespiegelt wird. Dazu muss man sich schon direkt davor stellen und benötigt eine halbwegs glatte Fläche.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 16, 2003 17:18 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Bei einer fast ebenen Fläche wie Wasser, kann man auch die Kamera an der Ebene spiegeln, das Spiegelbild in eine Texture rendern und diese Texture dann auf die Wasseroberfläche projektieren. Dabei kann man die Texture natürlich noch mit einer Bumpmap verzerren.
Damit Wasser echt aussieht muß man auch dafür sorgen, daß das Bild unter dem Wasser auch durch die Bumpmap verschoben wird. Dafür rendert man alles unter dem Wasser am besten auch in eine Texture.
Je nach Blickwinkel auf die Wasserebene überblendet man dann zwischen der Spiegeltexturen und der Texture mit dem gebrochenen Bild.
Wenn man flach auf das Wasser sieht, kann man fast gar nicht hindurch sehen und die Spiegelung überwiegt. Zur Spiegelung der Kameraposition gibt es zur Zeit bei gamedev.net einen Artikel.


Zuletzt geändert von LarsMiddendorf am Di Dez 16, 2003 17:23, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Dez 16, 2003 17:19 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 29, 2002 13:24
Beiträge: 91
Wohnort: Oberhausen (NRW)
Ich hatte auch schon darüber nachgedacht das zu machen wie in eurem "Render To Texture" Beispiel. Also die Szene von einer bestimmten Ansicht zu rendern und als eine Environment Map auf das Wasser zu packen. Wäre das auch möglich? Oder hat vllt. jemand eine andere Idee dies zu realisieren? Sollte ja nur so echt wie möglich aussehen. Reicht auch wenn dies ein "Fake" wäre aber halt am besten ohne, dass ich jedes mal wenn ich das Level ändere, eine neue Envmap zu erstellen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 17, 2003 15:48 
Offline
DGL Member

Registriert: So Okt 12, 2003 14:53
Beiträge: 74
Die Szene in eine Textur rendern und dann anzeigen hab ich mir auch schonmal so gedacht. Das Problem ist find ich jedoch, dass ich nicht weiß an welche stelle die kamera sich befinden muss, bzw wo sie hingucken muss, wenn das in ne Textur gerendert wird. Hat da jemand ne Idee?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 17, 2003 15:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Die Kamera muss gerade in diese Richtung schauen? Also vom Mittelpunkt aus nur in die entsprechende(n) Richtung(en) drehen. Würde ich mal so sagen. Habe das zwar auch noch nicht gemacht aber alles andere ist eher unlogisch.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 17, 2003 16:17 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Warum machste das denn nicht per Cubemap wie ich vorgeschlagen hab? Geht doch ganz einfach : Du renderst die sechs Cubemapseiten aus der Mittelposition deiner Wasserfläche (natürlich ohne die Wasserfläche) und kopierst diese sechs Ansichten dann in deine Cubemaptexturen, dann musst du nur noch Cubemapping aktivieren (siehe dazu mein Tutorial) und schon hast du ne richtig schöne und v.a. korrekte Spiegelung deiner Umgebung, die sogar dynamisch sein kann...ne bessere und einfachere Methode gibts kaum.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 17, 2003 16:39 
Offline
DGL Member

Registriert: So Okt 12, 2003 14:53
Beiträge: 74
hm ist es wirklich sinvoll um auf einem kleinen polygon zum Beispiel eine sache zu spiegeln, ne Cubemap zu benutzen? Das ist dann zwar schön, aber doch bestimmt nicht schnell, oder? Weil 6 Texturen um auf einem Polygon zu spiegeln ist doch eigentlich nicht nötig. Das müsste auch mit nur einer Textur gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 17, 2003 16:43 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Nein, Cubemapping läuft doch in Hardware ab und ist daher auch auf älterer Hardware schnell und wird besonders in ner Szene in der noch viele andere Sachen gezeigt werden kaum an der Gesamtleistung zehren. Und darüberhinaus kann man Reflektionen wie berets erwähnt weder viel einfacher noch viel performanter realisieren.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 17, 2003 16:47 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
In 6 Cubemap Texturen zu rendern dürfte aber eigentlich langsamer sein, als in eine Texture zu rendern und die dann auf die Wasseroberfläche zu projektieren. Was anderes ist das natürlich mit vorherberechneten Cubemaps wie in UT2003.
Wenn man ein komplexes Objekt mit vielen verschiedenen Normalen hat, dann macht die Cubemap Sinn. Aber bei einer Wasseroberfläche reicht doch auch eine Texture.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 17, 2003 18:07 
Offline
DGL Member

Registriert: So Okt 12, 2003 14:53
Beiträge: 74
Genau das meinte ich.

Mal ne Frage: Wenn man ne Cubemap anzeigt, rechnet die Grafikkarte das dann SOFORT fertig, oder dauert das dann etwas? Kann ich mir igendwie nicht vorstellen das der das sofort fertig hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 17, 2003 18:13 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Dez 28, 2002 11:13
Beiträge: 2244
Das ist nicht sofort fertig, aber die Befehle werden alle in der richtigen Reihenfolge bearbeitet. Wenn du wissen möchtest, wann ein bestimmter GL Befehl verarbeitet wurde, kannst du auf GF Karten einen Fence(NV_fence) hinter dem Befehl in die Befehlsreihe einfügen und prüfen, ob er schon erreicht worden ist.
Auf anderen Karten könnte man in bestimmen Fällen ersatzweise ARB_occlusion_query benutzen, aber eigentlich ist es gar nicht nötig festzustellen, ob ein Befehl fertig ist.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 17, 2003 18:16 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Dez 13, 2002 12:18
Beiträge: 1063
Ich habe mal eine kleine Demo zusammengestellt, die genau das macht: 6 Cubemapflächen für "echte" Reflektionen zu berechnen.

Wer die Cubemap als Skybox dargestellt haben möchte, sollte den Kommentar vor folgender Zeile deaktivieren (in der .dpr Datei):
// bgBoundSkyBox := DynTexCubemap;

BaseGraph erstellt für dynamisches ECM einen Satz Proxy-Texturen und lädt dann die entsprechenden Bilder mittels glCopyTexSubImage2d in die Texture, was meines erachtens der schnellste Weg sein dürfte, wenn RenderToTexture nicht möglich ist (außerdem braucht man so keinen Wechsel des Gerätekontexts, der bei RenderToTexture auch etwas bremsen dürfte).

Das Ganze könnte man natürlich bombastischer machen - ich denke aber, das Prinzip sieht man recht gut - insbesondere wenn man die berechnete Cubemap als Sykbox projezieren lässt.
Der Nachteil dieser Methode ist übrigens, dass pro reflektierendem Objekt eine eigene Cubemap berechnet werden müsste, was die Brauchbarkeit also auf einige wenige Special Effects beschränkt.

Wie man sieht, vertragen sich OpenGL Beleuchtung und berechnete Cubemaps ebenfalls nicht besonders gut (und das obwohl die Lichtquelle eigentlich neu berechnet werden würde - vielleicht liegt es aber auch nur an den ATI 9000 Treibern).

Bild

Und hier geht's zum Download

http://www.basegraph.com/bg/demos/DCM.zip

_________________
Viel Spaß beim Programmieren,
Mars
http://www.basegraph.com/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 17, 2003 18:30 
Offline
DGL Member

Registriert: So Okt 12, 2003 14:53
Beiträge: 74
Aber wenn die Cubemap berechnung etwas dauert dann ist das was son of satan gesagt hat ja eigentlich falsch, weil wenn man zum beispiel ein so'n cubemap teil darstellt und direkt danach angibt, dass er noch ein paar andere polygone zeichnen soll, dann ist das ja doch langsamer als wenn man die cubemap berechnung weglässt, oder seh ich das falsch?

@Mars: Dein Programm ruckelt :roll: (geforce 2).


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 19 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot] und 17 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.008s | 15 Queries | GZIP : On ]