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

Aktuelle Zeit: Mi Jul 16, 2025 21:27

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



Ein neues Thema erstellen Auf das Thema antworten  [ 11 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: "Tiefenshader" nur etwas anders
BeitragVerfasst: Do Mai 24, 2007 14:05 
Offline
DGL Member
Benutzeravatar

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

Der Titel mag vielleicht in anbetracht des Sinns etwas verwirrend sein, aber was besseres ist mir gerade nicht eingefallen.

Ich möchte gerne die Wassertiefe in einer Szene in eine Textur rendern. Eigentlich schien das ganz einfach, ich müsste ja nur die Y-Koordinate nehmen und vielleicht noch mit einem Faktor verrechnen und dann als Farbe darstellen - Das klappte allerdings nicht.

Das Problem ist, dass ich immer auf falsche ergebnisse kam. Bis jetzt bin ich einfach noch nicht darauf gekommen, wie ich es richtig machen kann. Hier mal mein Shadercode:

Code:
  1.  
  2. varying vec4 vpos;
  3. varying vec4 cpos;
  4. varying vec4 cutpos;
  5. uniform float planey;
  6. uniform int mode;
  7. uniform mat4 cm;
  8.  
  9. void main(void)
  10. {
  11.   vpos            = gl_Vertex;
  12.   cpos            = gl_ModelViewMatrix * gl_Vertex;
  13.   cutpos          = gl_ModelViewMatrix * vec4(1.0, 0.0, 0.0, 1.0);
  14.   gl_Position     = gl_ModelViewProjectionMatrix * gl_Vertex;
  15.   gl_TexCoord[0]  = gl_MultiTexCoord0;
  16.   gl_FrontColor   = gl_Color;
  17.  
  18. }

(^ Vertexshader)

Code:
  1.  
  2. varying vec4 vpos;
  3. varying vec4 cpos;
  4. varying vec4 cutpos;
  5. uniform float planey;
  6. uniform int mode;
  7. uniform mat4 cm;
  8.  
  9. void main(void)
  10. {
  11.   float diff;
  12.   diff = cutpos.y - cpos.y;
  13.   gl_FragColor = vec4(diff, diff, diff, 1.0);
  14. }
  15.  

(^ Fragmentshader)

Das Problem ist bei diesem Shader, dass der Farbverlauf immer relativ zur Kamera ist, dass heißt, wenn ich die Kamera bewege (bzw. im moment nur drehe) dann bewegt sich der Verlauf nicht mit, also ich habe immernoch nach oben hin meinen Verlauf von schwarz nach weiss, obwohl die Wasserfläche ganz anders steht.
Weiss da wer was, wie ich das lösen kann?

//Edit: Bei unklarheiten oder verständnisfragen: scheut nicht hier nachzufragen

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 Mai 24, 2007 15:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jul 17, 2002 12:07
Beiträge: 976
Wohnort: Tübingen
Versuch's mal ohne die Multiplikation mit der Modelview-Matrix. Dann dürfte es klappen, außer du verwendest Transformationen, um deine Geometrie zu beeinflussen...

_________________
"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: Do Mai 24, 2007 15:56 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Jep, die Geometrie wird rotiert. Wenn ich die Multiplikation weglasse, dann geht es, bis ich die Rotation des Würfels einschalte.

Gibt es da irgendein workaround?

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 Mai 26, 2007 22:18 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Multipliziere es nur mit der Modelmatrix, und nicht mit der Viewmatrix.
Zudem funktioniert das nicht ganz so hübsch aussehen mit der einfachen Technik.

Mit dem Thema Wassershader bin ich im moment stark beschäftigt, habe leider den Code nicht hier( Wobei hier Wassertiefe, Lichteinfall & Co mit berechnet werden ).

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Mai 27, 2007 09:43 
Offline
DGL Member
Benutzeravatar

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

nur Modelmatrix? Wie geht das, es gibt doch nur gl_ModelViewMatrix und gl_ModelViewProjectionMatrix, oder?

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 Mai 27, 2007 17:55 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Übergib die Modelmatrix als Uniform mat4.
Das setzt natürlich vorraus das du die Modelmatrix per hand erstellt hast und nicht irgendwie mit glPush und glPop das ganze gemacht hast.

mfg

Speedmaster

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Mai 30, 2007 16:25 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Was meinst du? Soll ich die Operationen, die ich nach der Kamera gemacht habe als Matrix übergeben?

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 Mai 31, 2007 10:23 
Offline
DGL Member

Registriert: Do Apr 08, 2004 16:55
Beiträge: 516
Lord Horazont hat geschrieben:
Was meinst du? Soll ich die Operationen, die ich nach der Kamera gemacht habe als Matrix übergeben?

Gruß Lord Horazont


Du übergibst nur eine LookAtMatrix( View Matrix ) und multiplizierst diese mit deinem Vertex.


Hier mal bisl Code:
Meine Berechnung der Distance des Vertexpunktes zu Kamera im Bezug auf meine Maximale ViewDistance( DirectX HLSL )
Code:
  1.  
  2.  // Output the transformed position
  3. OUT.Position = mul( IN.Position, matViewProjection );
  4. // Output the scene depth
  5. OUT.Depth = OUT.Position.z / MaxViewDistance;



Farbverlauf in Y Richtung:
Code:
  1.  
  2. float4 transformedPosition = mul(IN.Position, matView);
  3. float yDepth = clamp( (transformedPosition.y - YMin)  / (YMax - YMin), 0, 1);

_________________
Shareholder und Leitender Entwickler bei Pipedream-Games.

Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 01, 2007 19:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Kannst du es nicht wie beim Shadow Mapping machen?
Nimm doch einfach den transformierten z-Wert ausm Vertexshader. Bei OGL geht der dann von -1..1, wenn du einen anderen Bereich willst, musst entsprechend anpassen. Nur mit dem w musst du aufpassen, also evtl dann im transformierten z Wert noch durch w nehmen.

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jun 02, 2007 09:55 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Nein. Das Problem ist ja, dass ich nicht von oben auf die Wasserfläche schaue. Dann würde das Problemlos gehen, ich brauche aber den Abstand von einer XZ-Ebene auf Höhe Y=0.

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 Jun 02, 2007 12:50 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
Hm oder du machst etwas Mathematik.
Vertex + Lichtrichtung ist eine Gerade.
Du schaust wo diese Gerade deine Ebene schneidet. 2 Punkte -> Abstand berechnen.

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


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 » Shader


Wer ist online?

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