DGL
https://delphigl.com/forum/

[Wiki] Alphamasking (Theorie)
https://delphigl.com/forum/viewtopic.php?f=21&t=4650
Seite 1 von 1

Autor:  La Boda [ Sa Okt 01, 2005 12:43 ]
Betreff des Beitrags:  [Wiki] Alphamasking (Theorie)

Ich würde gerne für das Wiki einen Artikel zu Alphamasking verfassen. Im Gegensatz zu den allgemein bekannten Anleitungen, wie etwa von Sascha Willems oder auch die Anleitung zur glBitmap-Unit möchte ich gerne mehr auf die Theorie eingehen, also wie man zum Beispiel aus einer separaten Textur die Alphawerte ausliest und einer Textur so den Transparenzgrad zuweist. Hat da jemand einen Artikel oder ein Whitepaper, das darauf eingeht?
Danke
Boda

Autor:  Lossy eX [ Sa Okt 01, 2005 16:15 ]
Betreff des Beitrags: 

Ich denke mal nicht, dass man da allzu viel zu schreiben kann. Im Endeffekt werden ja nur die Werte eines jeden Pixels mit einem Referenzwert verglichen und wenn die Bedingung erfüllt wird, dann wird das Pixel dargestell anderenfalls nicht. Das Wichtige daran ist ja lediglich, dass ein gesondeter Kanal in die Textur eingefügt werden muss. Aber es kann natürlich durchaus sein, dass ich das alles zu einfach sehe, weil ich zu häufig damit zu tun habe. Das ist jedenfalls meine Meinung.

Sonst kann ich leider nicht mit irgendwelchen Artikeln etc weiter helfen. Selbst im RedBook (frei Version) wird beim Thema Texturierung eher auf alles Andere eingegangen. Aber nicht speziell nur auf den Alphatest.

Autor:  La Boda [ Sa Okt 01, 2005 17:26 ]
Betreff des Beitrags: 

Ok danke. Ich habe ja erwartet, dass das Thema nicht recht ergiebig ist.
Nichtsdestotrotz würde mich jetzt mal interessieren, wie du konkret in deinem Loader den Alphachannel an OpenGL übergibst, ich kann das in deinem Source nämlich nicht finden. Wenn es dich stört, dass ich da evtl Betriebsgeheimnisse ;) ausschnüffele, dann sag Bescheid!

Autor:  Lossy eX [ Sa Okt 01, 2005 18:47 ]
Betreff des Beitrags: 

Nein stört mich nicht. Sonst hätte ich die Quellen ja nicht veröffentlicht. ;-)

Kurz zum Aufbau.
Bilddaten werden geladen und in ein TBitmap gepackt. Dieses wird dann an eine Methode übergeben die dessen Daten in den internen Speicher kopiert. Ja ich weiß. Ist mitunter ein wenig umständlich. Aber zwecks Objektorientierung und Bitmapkompatibilität habe ich den Weg gewählt. Abgesehen davon muss ich nicht für jeden Typ (1D/2D) einen eigenen Laderoutine schreiben. Die ist so in der Basisklasse verankert. Und langsam ist es dadurch auch nicht, da ich die Daten blockweise kopieren kann.
Wenn die Bilddaten zugewisesen werden wird geprüft welchen Typ sie haben. Derzeit sind nur BGR (24 Bit) und BGRA (32 Bit) möglich. Dabei wird dann intern das Format festgehalten. In der nächsten Version sind noch ein paar weiter Formate möglich. ;-)

Sollte ein Alphakanal hinzugefügt oder entfernt werden so wird immer ein neuer Speicher angelegt und nur die relevanten Daten kopiert oder neue eingefügt. Das interne Format wird dann anhand der Operation angepasst.

Beim Erstellen der Textur werden die Typvariablen abgefragt und es wird gleichzeitig überprüft ob die OpenGL Implementation diese überhaupt unterstützt. Sollte das nicht der Fall sein so wird eine alternative verwenet. (von BGR(A) in RGB(A) umwandeln) Ich wähle also immer anhand des zu grunde liegenden Formates ein passendes OpenGL Format aus. Das Ganze wird dann mittels glTexImage2D (1D) an OpenGL übergeben. Vorher werden noch diverse Textur Optionen gesetzt. Also Automatische MipMaps, Filterung und Wrap.

Bei den Format muss auch zwischen dem internen Datenformat und dem Zieltexturformat unterschieden werden. Es besteht durchaus die Möglichkeit eine BGRA 8 Bit Pro Kanal Textur zu laden und diese entweder zu komprimieren oder in eine 4 Bit pro Kanal umzuwandeln. Alles eine Frage der Parameter.

Das wars eigentlich schon. Hoffe das war jetzt nicht zu verwirrend.

Autor:  La Boda [ Sa Okt 01, 2005 21:14 ]
Betreff des Beitrags: 

Verwirrend war das Ganze nicht, ganz im Gegenteil. Ich habe blos immer noch leichte Probleme, da das Alpha-bezogene rauszulesen. Sehe ich das richtig, dass es da nur auf die vierte Farbkomponente drauf ankommt? Ich habe immer gedacht, dass OpenGL intern eine zweite Textur braucht, die den Alphakanal verwaltet. Aber so macht das natürlich mehr Sinn! Wenn das so richtig ist, dann werd ich mich mal dranmachen, einen Artikel zu verfassen, dass das etwas ausführlicher erklärt.

Autor:  Delphic [ Sa Okt 01, 2005 21:21 ]
Betreff des Beitrags: 

beides geht - je nachdem welchen blendmodi man einsetzt. benutzt man keine seperate alpha textur (sparenderweise GL_ALPHA als int. texturformat) sondern wirklich einen alphakanal in der textur, dann benötigt man GL_RGBA als int. texturformat. Netterweise ist das unabhängig davon, ob in ein Bitmap mit oder ohne Alphakanal gerendert wird.

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