DGL
https://delphigl.com/forum/

#include im Shader
https://delphigl.com/forum/viewtopic.php?f=20&t=11258
Seite 1 von 1

Autor:  mathias [ Di Nov 11, 2014 18:27 ]
Betreff des Beitrags:  #include im Shader

Ich habe verschiedene Shader, bei denen der Beleuchtungsteil immer gleich ist.
Kann man dies auch irgendwie in eine Bibliothek auslagern ?

Code:
  1. #version 330
  2. in vec3 Pos;
  3. in vec3 Normal;
  4. in vec4 Color;
  5.  
  6. out vec4 OutColor;
  7.  
  8. uniform bool ifLight = false;
  9.  
  10. // Dieser Teil ist immer gleich.
  11.  
  12. uniform vec3 LightPosition = vec3(1.0, 1.0, 1.4);
  13.  
  14. float UmgebungsLicht = 0.3;
  15.  
  16. float diffuse(vec3 LightPosition)
  17. {
  18.   vec3 LP        = (LightPosition * 1.0) - Pos;
  19.   float distance = length(LP);
  20.   float dif      = max(dot(Normal, LP), UmgebungsLicht);
  21.   return           dif * (1.0 / (1.0 + (0.25 * distance * distance)));
  22. }
  23.  
  24. float specular(vec3 LightPosition)
  25. {
  26.   vec3 Eye          = normalize(LightPosition);
  27.   vec3 Reflected    = normalize( reflect( -Pos, Normal ));
  28.   return              0.5 * pow(max(dot(Reflected, Eye), 0.0), 1.0);
  29. }
  30.  
  31. // bis hier
  32.  
  33. void main()
  34. {
  35.   OutColor = Color;
  36.  
  37.   float cdummy = OutColor.a;
  38.  
  39.   if ( ifLight )
  40.   {
  41.     OutColor = OutColor * (diffuse(LightPosition) + specular(LightPosition));
  42.   }
  43.   OutColor.a = cdummy;
  44. }

Autor:  Vinz [ Di Nov 11, 2014 23:51 ]
Betreff des Beitrags:  Re: #include im Shader

Ja, das geht.
Standardmäßig ist da aber nix vorhanden, soweit ich weiß.
Du musst die Direktive selber coden.
Ich hab es mal in c implementiert, und zwar so, dass eben immer nach dem include-Kennwort gesucht wird, und dann der Inhalt der Datei des Pfades nach dem Kennwort dort reingeschieben wird.
Da gabs auch letztens ein recht ausführliches Projekt dazu, hier:
viewtopic.php?f=13&t=11201

Autor:  mathias [ Mi Nov 12, 2014 17:19 ]
Betreff des Beitrags:  Re: #include im Shader

Zitat:
Ja, das geht.
Standardmäßig ist da aber nix vorhanden, soweit ich weiß.

Das habe ich mir fast gedacht.

Mir ist schon eine Idee gekommen, ich mache den Beleuchtungsteil in eine Konstante.

Im Shader-Code schreibe ich z.B. $Light.
Mit StringReplace könnte ich $Light durch den Beleuchungs-Code ersetzen.

Wen ich dann was im Beleuchtung-Code ändere, ist es dann in allen Shadern angepasst.

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