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.
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:
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 .
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 network • my 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
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.
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?)).
Gute Idee. Leider passiert hier gar nichts bei mir. Muss dazu noch weitere Einstellungen vorhanden sein ?
Mein Objekt will einfach nicht verschwinden ...
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 network • my 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
Gibt es eigentlich irgendwo eine Liste der sinnvollen Kombinationen? Denn ich hab teilweise das Gefühl das manche Kombinationen total überflüssig sind.
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.
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
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 network • my 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
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
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.
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 network • my 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
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
Mitglieder in diesem Forum: 0 Mitglieder und 3 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.