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

Aktuelle Zeit: Do Mär 28, 2024 15:50

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



Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Transparente Elemete
BeitragVerfasst: So Jan 05, 2014 18:11 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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.  

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Transparente Elemete
BeitragVerfasst: So Jan 05, 2014 18:17 
Offline
DGL Member
Benutzeravatar

Registriert: Sa Aug 18, 2007 18:47
Beiträge: 694
Wohnort: Köln
Programmiersprache: Java
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.

_________________
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: Re: Transparente Elemete
BeitragVerfasst: So Jan 05, 2014 18:24 
Offline
DGL Member

Registriert: Do Dez 29, 2011 19:40
Beiträge: 421
Wohnort: Deutschland, Bayern
Programmiersprache: C++, C, D, C# VB.Net
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Transparente Elemete
BeitragVerfasst: So Jan 05, 2014 19:28 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1276
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
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.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 4 Beiträge ] 
Foren-Übersicht » Programmierung » Shader


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 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.048s | 19 Queries | GZIP : On ]