DGL
https://delphigl.com/forum/

Transparente Elemete
https://delphigl.com/forum/viewtopic.php?f=20&t=11073
Seite 1 von 1

Autor:  mathias [ So Jan 05, 2014 18:11 ]
Betreff des Beitrags:  Transparente Elemete

Ich habe mit Transparenten Elementen experimentiert. Da kahmen wegen des Lichtes ganz komische Effekte raus.
Da bin ich auf die Idee gekommen und habe die drei untersten Zeilen eingefügt.

Ist das die richtige Lösung oder gibt es etwas eleganteres ?

Code:
  1. #version 330
  2.  
  3. in vec3 Pos;
  4. in vec4 Color;
  5. in vec3 Normal;
  6.  
  7. out vec4 FragColor;
  8.  
  9. vec3 LightPosition = vec3(-2.0, 2.0, 0.0);
  10. float UmgebungsLicht = 0.3;
  11.  
  12. void main() {
  13.   LightPosition = (LightPosition * -1.0) - Pos ;
  14.   float distance = length(LightPosition);
  15.   float diffuse = max(dot(Normal, LightPosition), UmgebungsLicht);
  16.   diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance * distance)));
  17.   float colAlpha = Color.a;      // Alpha Wert sicher
  18.   gl_FragColor = Color * diffuse;
  19.   gl_FragColor.a = colAlpha;     // Und wieder zurückschreiben
  20. }
  21.  

Autor:  damadmax [ So Jan 05, 2014 18:17 ]
Betreff des Beitrags:  Re: Transparente Elemete

Du könntest auch
Code:
  1.  
  2. gl_FragColor = vec4( Color.xyz * diffuse, Color.a );
  3.  


machen. Zumindest mache ich es so und finde es übersichtlicher. Wie es Performance-technisch aussieht weiß ich nicht.

Autor:  OpenglerF [ So Jan 05, 2014 18:24 ]
Betreff des Beitrags:  Re: Transparente Elemete

Nebenbei, du erstellt die Ausgabe "out vec4 FragColor;" und schreibst "gl_FragColor = [...]"
Da sollte es eigentlich auch eine Warnung geben. Auf jeden Fall kann es durch solche Konstrukte zu genau solchen Effekten kommen, wie du sie in einen anderen Thread auch schon genannt hast: Auf manchen Geräten geht es, auf manchen manchmal nicht.

Performancemäßig sollte es keinen Unterschied geben, weil ja der Ablauf optimiert werden sollte. Wenn aber nicht(Was ich mir bei einigen grottigen Treibern schon vorstellen kann), dann ist eher die Variante von Damadmax schneller. Kommt ja mit weniger Zuweisungen, temporären Variablen aus.

Autor:  mathias [ So Jan 05, 2014 19:28 ]
Betreff des Beitrags:  Re: Transparente Elemete

Zitat:
Nebenbei, du erstellt die Ausgabe "out vec4 FragColor;" und schreibst "gl_FragColor = [...]"
.
Danke, dies habe ich übersehen.

Zitat:
Du könntest auch
Code:
  1. gl_FragColor = vec4( Color.xyz * diffuse, Color.a );

machen. Zumindest mache ich es so und finde es übersichtlicher. Wie es Performance-technisch aussieht weiß ich nicht.

Danke, das sieht besser aus, ich werde es anpassen.

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