DGL
https://delphigl.com/forum/

Kein Nebel im Shader
https://delphigl.com/forum/viewtopic.php?f=20&t=6876
Seite 1 von 1

Autor:  damadmax [ Mo Sep 03, 2007 12:55 ]
Betreff des Beitrags:  Kein Nebel im Shader

Also laut Orange Book (welches ich seit ein paar tagen habe) soll man folgendes machen um den Standard OpenGL Nebel (linear) zu erzielen:

Vertex Shader:
Code:
  1.  
  2. void main
  3. {
  4.   gl_Position = ftransform();
  5.   vec4 ecPosition = gl_ModelViewMatrix * gl_Vertex;  // EyeCoordinate berechnen
  6.   gl_FogFragCoord = abs(ecPosition.z);  // Nebel Koordinate auf z-Entfernung setzen
  7. }
  8.  


Fragment Shader:
Code:
  1.  
  2. void main
  3. {
  4.   float fog = (gl_Fog.end - gl_FogFragCoord) * gl_Fog.scale; // Intensität berechnen
  5.   fog = clamp(fog, 0.0, 1.0);  // Beschneiden
  6.   color = Farbe von Texture etc
  7.   gl_FragColor = mix(gl_Fog.color, color, fog);  // Nebelfarbe einmischen
  8. }
  9.  


Klappt nur leider überhaupt nicht. Alles grau.
Wenn ich die Nebelberechnung komplett weglassen wird die Landschaft 1A gezeichnet.
Wenn ich den fog-Wert manuell setze krieg ich immerhin nen leichten schleiher hin, aber der wird halt nicht stärker.

Vielen Dank im voraus

damadmax

Autor:  Lord Horazont [ Mo Sep 03, 2007 13:08 ]
Betreff des Beitrags: 

Vielleicht solltest du die werte noch mal manuell nachskalieren, z.B. *10 an den Z-Wert oder so, das kann schon helfen.

Gruß Lord Horazont

Autor:  damadmax [ Mo Sep 03, 2007 13:22 ]
Betreff des Beitrags: 

Danke Lord...

...gl_Fog.scale stimmt nicht bzw wird garnicht oder anders berechnet als man es braucht.
Wenn ich es mittels (1 / (gl_Fog.end - gl_Fog.start)) selber berechne klappt es. *freu*

nochmal danke für den Denkanstoss

gruß

damadmax


Nachtrag:

Wenn ihr versucht eine Wasseroberfläche mit Nebel zu versehen klappt das nur wenn sie aus mehr als 1 Quad besteht. Soll heissen wenn ihr das Wasser ziemlich gross z.b. 512 Einheiten in alle Richtungen zeichnet, wird die Nebelkoordinate gl_FogFragCoord nicht richtig interpoliert. Gelöst habe ich das problem indem ich einfach 4x4 oder mehr Quads gezeichnet habe.

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/