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

Aktuelle Zeit: Fr Jul 18, 2025 04:39

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 15 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Fading
BeitragVerfasst: Do Mai 15, 2008 19:50 
Offline
DGL Member

Registriert: So Mär 02, 2008 18:47
Beiträge: 30
Hallo,

mein Ziel für den heutigen Abend war es ein Objekt langsam einblenden zu lassen. Habe mich im Vorwege hier im Forum umgeschaut und das Tut7 durchgearbeitet.

http://wiki.delphigl.com/index.php/Tutorial_Lektion_7


Wichtig ist wohl, dass ich mit Texturen arbeite. Aktiviert ist auch der Z-Buffer: gl.glEnable(GL_DEPTH_TEST);
Ausschalten kann ich den irgendwie nicht, denn dann verschwinden einige Flächen gänzlich.


In der init() buz direkt vor dem Zeichnen des Objektes habe ich folgendes gemacht:

Code:
  1.  
  2.  
  3.  gl.glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
  4.  gl.glAlphaFunc(GL_GREATER,0.1f);able(GL_DEPTH_TEST);
  5.  


und vor dem zeichnen des Objektes aktiviere ich das Blending und den Alpha Test:
Code:
  1.  
  2. gl.glEnable(GL_ALPHA_TEST);
  3. gl.glEnable (GL_BLEND);
  4.  


Die Folge meiner Bemühungen war definitiv nichts. Es ist nichts passiert. Was läuft da bloß falsch ?

VG
SOA


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 15, 2008 20:04 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Der Alphatest ist dazu gedacht, Fragmente (Pixel) komplett auszublenden, wenn ihr Alphawert größer oder kleiner eines bestimmten Wertes ist (definiert in glAlphaFunc).
Ist also eher geeignet, um komplexere Objekte (z.B. Blätter von einem Baum) halbwegs realistisch mit einer Textur darzustellen.

Was du brauchst ist Blending. Ich frage mich, wie du auf glAlphaFunc kommst, wenn du Tutorial sieben gelesen hast :shock: .

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 15, 2008 22:18 
Offline
DGL Member

Registriert: So Mär 02, 2008 18:47
Beiträge: 30
Danke erst einmal für die Antwort.

Was jetzt einen leichten Effekt herbeiführt sind:

gl.glBlendFunc(GL_SRC_ALPHA,GL_ONE);

oder das gleiche mit: gl.glBlendFunc(GL_ONE,GL_ONE);

oder gl.glBlendFunc(GL_ONE,GL_DST_COLOR);

Das Objekt wirkt nun leicht durchsichtig. Ein Erfolg... Doch ich möchte ja "faden" .
Von gar nicht zu sehen auf 100% .

Wie stelle ich das an, wenn ich Texturen im Einsatz habe.?


VG


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 16, 2008 08:58 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 10, 2006 18:26
Beiträge: 51
Also ich würde es so machen das ich den Alpha-Wert der Quads, des Objekts, Animieren würde. Also den Alpha-Wert bei jedem Zeichnen um einen bestimmten Wert erhöhen.

Code:
  1.  
  2. Var Alpha: single;
  3.  
  4. Alpha:= 0;
  5. .
  6. .
  7. .
  8.  
  9. glEnable(GL_BLEND);
  10. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  11.  
  12. glcolor4f(1,1,1,Alpha);
  13. Zeicnen;
  14. Alpha:= Alpha+0.001;


Hierbei düfte es eigendlich auch egal sein ob du Texturen verwendest oder nicht. Die Quads werden mitsamt der Texturen duchsichtig (oder in diesem fall undurchsichtig (gibts dieses Wort?)).


Alex


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 16, 2008 12:56 
Offline
DGL Member

Registriert: So Mär 02, 2008 18:47
Beiträge: 30
Hallo Alex,

danke für den Tipp.


Hab das einmal probiert.

Code:
  1.  
  2.  
  3. gl.glEnable(GLEnum.GL_BLEND);
  4. gl.glEnable(GLEnum.GL_COLOR);
  5. gl.glBlendFunc(GLEnum.GL_SRC_ALPHA, GLEnum.GL_ONE_MINUS_SRC_ALPHA);
  6.              
  7. gl.glColor4f(1,1,1,alpha);    
  8.  
  9. ..
  10. //zeichnen des Objektes
  11.  
  12.  gl.glDisable(GLEnum.GL_BLEND);
  13.  
  14.  


Gute Idee. Leider passiert hier gar nichts bei mir. Muss dazu noch weitere Einstellungen vorhanden sein ?
Mein Objekt will einfach nicht verschwinden ...

Danke


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 16, 2008 13:00 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Zur erläuterung:

Mit
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
wird die Farbe so berechnet, wie es auch die meisten Bildbearbeitungsprogramme unter der Einstellung "Normal" bei den Zusammenführungseffekten haben. Für die meisten zwecke ist das genau das richtige. Es ist im prinzip ein "realistisches" Transparenzblending, wie man es bei einer klaren, gefärbten Plastikfolie haben könnte.

Mathematisch ausgedrückt bedeutet das folgendes:
Nehmen wir an, Zr, Zg und Zb sind die Farben an der Stelle des Framebuffers, wo wir gerade zeichnen. Qr, Qg und Qb sind die Farben des Pixels, den wir gerade darüberblenden wollen, z.b. ein Pixel eines Quads, welches du zeichnest. Qa ist hierbei auch noch der Alphawert, der die Deckkraft des Quads an dieser Stelle angibt. Alle werte sind Fließkommawerte von 0 bis 1, inklusive.
Die neue Farbe (Nr, Ng und Nb) berechnet sich dann so:
Nr = Zr * (1.0 - Qa) + Qr * Qa;
Ng = Zg * (1.0 - Qa) + Qg * Qa;
Nb = Zb * (1.0 - Qa) + Qb * Qa;
Na = Za * (1.0 - Qa) + Qa * Qa;

In Worten bedeutet das: Je größer die Deckkraft (Qa) des zu zeichnenden Quads (oder jeder anderen Primitive), desto mehr wird davon gezeichnet (Qr, Qg, Qb) und desto weniger bleibt von dem ursprünglichen Inhalt des Framebuffers erhalten (Zr, Zg, Zb).

//Edit:
Um die Deckkraft deines Quads (oder was auch immer) zu beeinflussen, benutzt du glColor4f. Der vierte Parameter gibt dabei die Deckkraft an, von 0.0 bis 1.0 inklusive.

Du hattest GL_ONE, GL_ONE als Blendingmodus ausprobiert. Die Formeln dafür sehen so aus:
Nr = Zr + Qr;
Ng = Zg + Qg;
Nb = Zb + Qb;
Na = Za + Qa;
Das ist das sogenannte Additive Blending, wo die beiden Werte einfach nur addiert werden.

GL_SRC_ALPHA, GL_ONE: Ist Additives Blending unter der berücksichtigung des Alphawertes:
Nr = Zr + Qr * Qa;
Ng = Zg + Qg * Qa;
Nb = Zb + Qb * Qa;
Na = Za + Qa * Qa;

GL_ONE, GL_DST_COLOR: Öfff.... Auch eine art additives Blending, nur wird der Alphawert im Framebuffer nicht addiert sondern aus dem neuen Pixel bezogen. Das ist nur bei Render To Texture interessant.
Nr = Zr + Qr;
Ng = Zg + Qg;
Nb = Zb + Qb;
Na = 0.0 + Qa;

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: Fr Mai 16, 2008 15:07 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
Gibt es eigentlich irgendwo eine Liste der sinnvollen Kombinationen? Denn ich hab teilweise das Gefühl das manche Kombinationen total überflüssig sind.

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 16, 2008 15:10 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 10, 2006 18:26
Beiträge: 51
Mhhh, Bei mir funktioniert das so. Ich habe schnell mal was mit easySDL zusammengestelt und es angehängt. Ist halt in Objectpascal geschreiben, aber ich denke das macht nichts aus, die Tutorials hier sind ja auch in Objectpascal.

Was mir gerade noch einfällt: Wenn du licht aktiviert hast musst duch auch glenable(GL_Color_Material); aufrufen.


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 16, 2008 16:14 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Lord Horazont: Falls du deine Beschreibung in die Wiki Beschreibung einbauen kannst, wär das vielleicht ganz nett. (Wobei das meiste dort auch steht.)

Siehe glBlendFunc (dort findet man auch beispiele für die Kombinationen)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Mai 16, 2008 17:15 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Habe das jetzt im glBlendFunc-Artikel untergebracht, vielleicht möchte noch wer korrekturlesen, falls ich was übersehen habe...?

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: Fr Mai 16, 2008 22:22 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ich denke das ist Ok. Falls jemand noch mehr Beispielbildchen beisteuern kann wäre das cool. Der Code den ich für die ersten Bilder verwendet habe ist ja aufgefüht. Vielleicht bekommen wir so mal alle(!) Blendkombinationen zusammen. Zumindest eine die expliziet aufgeführt wurde in deinem Text ist noch nicht dabei. Die sollte noch rein.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 17, 2008 13:21 
Offline
DGL Member

Registriert: So Mär 02, 2008 18:47
Beiträge: 30
Ich sage erst einmal vielen Dank. Das war wirklich sehr hilfreich. Insbesonde der Hinweis auf glEnable(GLEnum.GL_COLOR_MATERIAL);
Damit hat es bei mir letztlich funktioniert. Möglicherweise gehört soetwas auch noch in die Beschreibung des glBlendFunc-Artikels.

Das einzige Problem, welches ich bei GL_COLOR_MATERIAL sehe ist, dass das Shade Model nicht mehr funktioniert.

gl.glShadeModel(GL_SMOOTH); haut dann nicht mehr hin. Um es genau zu nehmen scheinen die kompletten Lichteffekte nicht mehr zu funktionieren.

Irgendetwas ist ja immer.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 17, 2008 14:20 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 10, 2006 18:26
Beiträge: 51
Dagegen sollte z.B
Code:
  1. glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

helfen.

Für die Optimalen Parameter guck dir einfach mal den glColorMaterial Artikel an.

Gruß Alex


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Mai 17, 2008 14:41 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Ein Hinweis auf GL_COLOR_MATERIAL ist bei glBlendFunc meiner Meinung nach defitiniv nicht nötig, da das nichts mit dem Blending sondern mit dem Lighting zu tun hat.

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 18, 2008 22:45 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
@Lord: Sooo würde ich das nicht verallgemeinern. Unser Wiki hat durchaus platz für Hinweise bei Typischen problemen. Falls also mehrfach solche Fragen auftauchen, kann man bei "HInweise" so was kurz(!) anmerken.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 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 | 14 Queries | GZIP : On ]