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

Aktuelle Zeit: Di Apr 16, 2024 19:39

Foren-Übersicht » DGL » News
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 17 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: [Tutorial] Stille Wasser
BeitragVerfasst: So Okt 28, 2007 14:09 
Offline
Ernährungsberater
Benutzeravatar

Registriert: Sa Jan 01, 2005 17:11
Beiträge: 2067
Programmiersprache: C++
Lord Horazont bereichert unser Wiki mit einem weiteren Tutorial.
Diesmal geht es um eine Wasserebene. Er zeigt wie man mit und ohne Shader Reflektionen und Refraktion einbaut.

Bild

Tutorial Wassereffekt

Wie immer wird um Feedback gebeten.

_________________
Steppity,steppity,step,step,step! :twisted:
❆ ❄ ❄ ❄ ❅ ❄ ❆ ❄ ❅ ❄ ❅ ❄ ❅ ❄ ❄
❄ ❄ ❄ ❅ ❄ ❄ ❄ ❅ ❄ ❄ ❆ ❄ ❄


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Okt 28, 2007 19:20 
Offline
DGL Member
Benutzeravatar

Registriert: Do Aug 25, 2005 16:00
Beiträge: 189
Programmiersprache: Java, C#
Yay, endlich ein Wasser Tutorial auf DGL. Herzlichen Dank :D

Werde mich morgen glaub ich mal mit beschäftigen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 29, 2007 09:30 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 31, 2005 11:02
Beiträge: 432
Wohnort: Rheinlandpfalz
Tolles Tutorial!
Werde es mir demnächst zu Gemüte führen, momentan sind Conan und ich immer noch an unserem Animations Loader :wink:
Aber ich hoffe, dass ich bald selbst schönes reflektierendes Wasser in meine Programme einbauen kann...
Wenn nicht, weiß ich ja, wen ich damit nerven kann :twisted:

_________________
http://texelviews.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 29, 2007 10:44 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
MatReno hat geschrieben:
Wenn nicht, weiß ich ja, wen ich damit nerven kann :twisted:

*angst bekomm* :wink:

Ne, wenn fragen bestehen, immer her damit!
Und viel spaß mit dem ding!

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: Mo Okt 29, 2007 15:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Vielen Dank für dieses Tutorial!

_________________
"Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0."
- Hal Faber

Meine Homepage: http://laboda.delphigl.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 29, 2007 16:37 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Cooles Tutorial. Vorallem auch weil es einen "Shaderfreien"-Teil gibt.
Ich hab mir das Tutorial jetzt nicht im Detail durchgelesen. Was mich interessiert ist, ob es für den "Feintuning" Abschnitt auch eine shaderfreie Version gibt oder ist es dort nicht nötig (bzw. möglich) sowas zu implementieren.

Bei den Bildern finde ich den Effekt immer etwas verwirrend, weil die die reflektierende Fläche außerhalb der Reflexion unsichtbar ist. Könntest du noch ein Bild hinzufügen, wo die Reflexionsfläche eine schicke Wassertextur hat. Dadurch könnte man vermutlich auch den Unterwasserteil besser von der Reflexion unterscheiden.
So als finalen Kick. ;)

Ansonsten find ich Tutorials mit vielen Bildern immer gut. :D

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 29, 2007 16:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hm, "echtes" Wasser hat ja an sich auch keine Textur, daher habe ich sowas nicht gemacht. Wenn allerdings mehr Objekte drumherum stehen oder man auch noch ne Skybox einbaut, dann sieht das ganze bestimmt noch besser aus, weil mehr gefüllt.
Was deine andere Frage betrifft: Ich hatte keine Idee, wie man den Feintuning Teil Shaderfrei lösen kann, da man ja den Abstand des Fragmentes von der Wasseroberfläche braucht.

Und danke für das viele Lob :D

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: Mo Okt 29, 2007 16:42 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ja mach mal ne Skybox drum. Das könnte schon schön werden.

Das Wasser keine Textur hat kann ich so nicht bestätigen. Zumindest hat es eine Farbe. Bei dir ist es absolut klar. Kannst du es irgendwie einfärben?

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Okt 29, 2007 16:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Einfärben wäre ja simpel zu machen, eine einfache Multiplikation im Shader bei gl_FragColor = mit gl_Color, dann könnte mans über glColor einfach steuern.
Und beim Non-Shader-Way kann mans ja sowieso über glColor4f steuern.

Skybox is im Moment schlecht, ich schlag mich gerade mit meinen Partikeleffekten rum :wink:
... und ich hab keine Skybox zur hand :roll:

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: Mo Okt 29, 2007 22:46 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Sascha hatte eine Im Wiki hinterlegt. Zwar nicht die größte, aber eine ist da. ;)

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mär 21, 2008 23:23 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Oops!

Versuche nun seit knapp 5 Stunden diesen Wassershader zum laufen zu bringen. Tada!!!!!! Und woran lags? Ein kleiner Fehler im Tutorial.
Das betrifft nur den Shader ohne "Feintuning".

Code:
  1.   refractcoord = texMat * gl_TexCoord[0];
  2.   refractColor = texture2DProj(refractTex, refractcoord);
  3.   refractcoord = gl_TexCoord[0];
  4.   refractcoord.x += offsetColor[0] * refractRatio;
  5.   refractcoord.z += offsetColor[1] * refractRatio;
  6.   refractcoord = texMat * refractcoord;
  7.  

Der Texturzugriff gehört nach unten und das erste Multiplizieren mit der Texturmatrix ist überflüssig:
Code:
  1.  
  2.   refractcoord = gl_TexCoord[0];
  3.   refractcoord.x += offsetColor[0] * refractRatio;
  4.   refractcoord.z += offsetColor[1] * refractRatio;
  5.   refractcoord = texMat * refractcoord;
  6.   refractColor = texture2DProj(refractTex, refractcoord);
  7.  

Sonst lohnt sich das ganze rumgerechne mit den Koordinaten garnicht und die bumpMap zeigt keinen Effekt.

Gruß
damadmax

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 22, 2008 00:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
In anbetracht der Tatsache, dass der Shader bei mir in der Form, in der er im Tutorial steht wunderbar funktioniert ist das durchaus interessant... Ich werde mal schauen, wie das bei mir mit deiner Änderung aussieht...

Ah, sagen wirs so, es ist kein Fehler im dem Sinne, vermutlich hast du einfach die beiden Zeilen:
Code:
  1.  
  2.   reflectColor = texture2DProj(reflectTex, reflectcoord);
  3.   refractColor = texture2DProj(refractTex, refractcoord);
  4.  

nicht mit übernommen, die auf diesen Teil folgen. Aber du hast in dem Sinne recht, dass der Texturzugriff am Anfang kompletter Irrsinn ist, genauso wie das setzen der Koordinaten. So gesehen, ist das auf jeden fall eine Optimierung, die ich wohl übersehen habe. Ich frage mich, wie es überhaupt dazu gekommen ist, vermutlich durch die stetige Weiterentwicklung des Shaders.

Auf jeden fall, danke für den Hinweis.

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: Sa Mär 22, 2008 01:57 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
Betrifft ja nur den nicht getunten Shader. Da fehlen besagte 2 Zeilen noch. Und den hatte ich per copy&paste rübergeballert.

Aber mittlerweile habe ich auch den getunten ans Laufen gebracht.
Allerdings hat das mit vpos.z für den Alphawert nicht so ganz geklappt. Habe stattdessen gl_Vertex.z genommen. Klappt 1A. Sofern man noch die Wasserhöhe mit einbezieht.
Und habe mir so ein 2. Rendern gespart.

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mär 22, 2008 11:11 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Moment moment, du hast dir das Rendern mit dem Tiefenshader gespart? Wie hast du das gemacht? Sollte ich da was übersehenhaben was die Performance verdoppeln kann?
//Edit: Habe den Fix jetzt ins Tutorial eingetragen

Übrigens: Wenn du ein hübsches ergebnis hast, poste hier doch mal nen Screenshot :wink:

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: So Mär 23, 2008 21:32 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
In deinem Tiefenshader schreibst du doch nur die Z koordinate (angenommen die Waterplane ist bei 0) des Fragments in den Alpha Kanal.
Nur eben in einem separaten Renderdurchlauf.

Mein Shader schreibt es beim normalen Rendern mit weg. Neben der Normalen Farbe halt auch den Alpha. Sollte kein Problem sein, da die Shader eh für jedes Projekt optimiert sein sollten.

Scrshot gibts hier

_________________
Es werde Licht.
glEnable(GL_LIGHTING);
Und es ward Licht.


Zitat aus einem Java Buch: "C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off"

on error goto next


Zuletzt geändert von damadmax am So Mär 23, 2008 21:41, insgesamt 2-mal geändert.

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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 25 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.069s | 17 Queries | GZIP : On ]