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

Aktuelle Zeit: Sa Jul 12, 2025 23:34

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Reflektionen
BeitragVerfasst: Mi Jun 21, 2006 19:29 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hi @ll

Ich würde jetzt gerne auf meine Wasserfläche (siehe Thread Bumpmapping) eine Reflektion einbauen.
Jetzt meine Frage:
Welche Methode eignet sich für eine Wasserfläche am besten und wie wendet man sie an?

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 22, 2006 12:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Hi,
ich weiß nicht ob du dir das schon angesehen hast, bzw. ob es dir weiterhilft,
aber eine Möglichkeit Spiegelungen einzubauen ist mit dem Stencil-Buffer gegeben.
Das Tutorial von Sascha ist sehr zu empfehlen.

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 22, 2006 13:43 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Klingt grundsätzlich nicht schlecht und kannte ich auch schon, aber es ist eben eine Wasserfläche und da wäre etwas Verzerrung (wie mit einer NormalMap) nicht schlecht...

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 22, 2006 13:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ich denke Stencilspiegelungen sind nur für glatte Flächen wirklich benutzbar. Auch wenn das Wasser wie in diesem Falle nur aus einem BumpMap besteht denke ich nicht, dass es gut aussehen würde. Eine einfache Möglichkeit eine Spiegelung zu erzeugen ist geht im übrigen mittels CubeMaps. Aber diese würden echte Wellen auf der Oberfläche verlangen. Und ob das dann mit CubeMaps noch gut aussehen würde kann ich nur vermuten.

Wasser ist so ziemlich eines der schwierigsten Themengebiete was du dir hättest aussuchen können. Du hast viele verschiedene Wellen auf der Oberfläche. Und da denke ich wirst du wohl oder übel eine ausreichen aufgelöste Matrix an Flächen nehmen müssen und mittels Shader und VBOs deine Wellen erzeugen. Wenn du auf diesen dann eine CubeMap von der Umgebung aufbringst könnte es schon genügen. Das Cubemap muss aus der Sicht des Wassers sein. Die Shader wären nicht unbedingt zwingend notwendig. Dann würde die Berechnung aber auf der CPU statt finden. Und du müsstest das VBO recht häufig updaten.

Aber das sind so die Dinge die mir einfallen würden. Habe bisher selber noch kein Wasser gemacht. Und ich denke mal es gibt mit sicherheit noch andere Möglichkeiten.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 22, 2006 14:29 
Offline
DGL Member
Benutzeravatar

Registriert: So Jun 04, 2006 12:54
Beiträge: 263
Wasserrefelktioonen sind der größte Problemfall in den Reflektionen. Die Sencilspiegelung nur für gerade Flächen geeignet und die Envrionmengemappten Spiegelungen sind nur optisch korrekt wenn die gespiegelten Bildteile sehr weit weg sind oder das Wasser so starke Wellen aufweißt, das man Bild mehr in der Spiegelung erkennen kann.

Je nach dem wie das Wasser ausehen soll gibt es verschieden Möglichkeiten:

Bei Wasser welches bis zum Horizont reicht, genügt eine Envrionmentmap der Skybox.


Nur leichte Waserbewegung um zu zweigen, das es Wasser ist:

EIn Framebufferobjekt erzeugen und die gespiegelte Welt dort hereinrendern. Der Renderbereich sollte etwas größer sein. Im FInalem Renderdurchgangwird mit hilfe der Normalvektoren ein Offset berechnet, und so das Bild aus dem Vorigem Renderdurchgang verzert. Möglicher weise macht es sinn den Tiefenpuffer aus dem erstem renderdurchdgang mit einzurechnen. DIeser Algoritmus hat gewisse Ähnlichkeit mit Hitzeflimmern und lässt sich definitiv nicht ohne shader realisieren.

Möglichkeit ohne/wenig Shader:
im erstem durchgan wird eine Stencilspigelung gerendert, darüber werden Envrionmentspiegelungen gelegt, zu deren NOrmalmap noch eine Alphamap kommt, die Transparent wird, wenn die Oberfläche gerade nach oben zeigt.

Völlig wahnsinig aufwändiges Wasser:
Ein Stencilspiegel pass in eine andere Textur und abhängig von stärke der Ablenkung, entweder die Envrionmentmap oder den den Vorgeränderten Stenclispiegel mit offset
benutzen


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 22, 2006 14:32 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Nov 13, 2004 11:00
Beiträge: 229
Wohnort: Steinhude
Bei verwendung von shadern kann man auch die Texturkoordinaten für eine Cubemap aus dr normalmap auslesen, insofern kann man in dem Fall auch ohne größere Polygonmengen die Reflexionen darstellen. Das Problem bei einer auf cubemapping basierenden technik ist allerdings, das die szene aus sicht eines punktförmigen Betrachters (der in dem Fall vermutlich in der Mitter der Wasserfläche sitzen wird) gerendert ist und zumindest bei Nahen Objekten dementsprechend an anderen Positionen auf der Wasseroberfläche perspektivische Fehler auftreten werden.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 22, 2006 14:42 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Danke für die vielen Antworten.

Mit Shadern kenne ich mich nun überhaupt nicht aus und das was ich im Wiki gelesen habe macht mir fast angst (Assembly?!? omg!)
Die Methode von Grizzly klingt gut, weil ich mir dann die hochauflösenden Polys / Matrizen sparen kann.

Es ist (in diesem Fall) Wasser, was bis zum Horizont reicht, aber scheinbar macht meine GraKa (NVidia GeForce 6200) keine CubeMaps mit. Ich wollte sie schon für die SkyBox verwenden, aber das ging nicht. Der Test auf die Erweiterung gab ein false zurück. Und ich würde doch gerne sehen, wie das dann aussieht ^^

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 22, 2006 15:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Lord Horazont hat geschrieben:
Der Test auf die Erweiterung gab ein false zurück.


Also eine 6200 kann definitiv CubeMaps. Denn selbst meine olle TNT2 konnte CubeMaps. Leider ist es bei OpenGL nicht die Erweiterung sondern es sind eigentlich fast immer die ErweiterungEN.

Cube Maps werden unterstützt wenn entweder GL_ARB_texture_cube_map oder GL_EXT_texture_cube_map als extension unterstützt werden oder OpenGL in der Version 1.3 oder höher vorliegt. Denn ab 1.3 befinden sich Cube Maps im OpenGL Kern. Ab dann müssen sie auch nicht noch mal extra als Extension unterstützt werden. Unterschiede sind mir jetzt so nicht bekannt. Wenn du CubeMaps verwenden möchtest dann kannst du komplett die Konstanten von dem Kern (Target = GL_TEXTURE_CUBE_MAP etc.) benutzen. Da ändern sich immer nur die Namen der Wert bleibt aber immer gleich und OpenGL bekommt auch nur den Wert. Also ist es für OpenGL egal welche du benutzt.

PS: Ich habe auch schon mal eine CubeMap Demo auf Basis der glBitmap gemacht. Bzw in der Wikidokumentation existiert auch ein Abschnitt für CubeMaps.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 23, 2006 10:59 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Und genau dieses glBitmap behauptet ernsthaft, dass CubeMaps nicht unterstützt werden und beendet mein Programm mit einer Exception.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 23, 2006 12:10 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Da kann ich jetzt so nichts konkretes zu sagen. Da musst du mir mal ein paar weitere Infos zukommen lassen. Dann lässt sich alles klären.

Wann hast du denn die Instanz der Klasse TglBitmapCubeMap erzeugt? Denn sobald du die Instanz erzeugt hast muss OpenGL schon voll funktionsfähig sein, da er sonst nicht sagen kann obs unterstützt wird oder net. Etwas anderes kann ich mir da gerade nicht vorstellen. Bzw wäre da auch mal interessant wie OpenGL initialisiert wird und ob du einen halbwegs sinnvollen Treiber drauf hast. Also eine neue Karte mit einem uralten Treiber wird auch keine Wunder vollbringen. Du kannst ja mal schauen ob bei dem Tool GLInfo da eine der beiden CubeMap Extensions vorhanden ist bzw was du für eine OpenGL Version hast.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 24, 2006 11:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Die glBitmap test scheinen sowieso nicht so ganz richtig zu laufen... Auch non-power-of-two-Texturen sind erlaubt, aber glBitmap wirft ne Exception raus.

Also GLInfo ergebnis:

OpenGL Version: 2.0.1
Die CubeMap extensions sind da.

Der Treiber ist vor 2 wochen geupdatet, frisch von NVidia (noch warm).

Aber ich hab den Fehler gefunden. Ich hatte als ich das implementiert hatte noch eine etwas ältere GL-Version. Da habe ich das sicherheitshalber gesperrt, damit ich keine Exceptions bekomme. Darin lag der Fehler.
[Edit]Oder auch nicht. CubeMapping geht trotzdem nicht.[/Edit]

Jetzt weiss ich aber immernoch nicht, wie ich das mit Grizzly's Methode machen kann...

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 3 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 16 Queries | GZIP : On ]