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

Aktuelle Zeit: Fr Jul 18, 2025 14:18

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



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Blending
BeitragVerfasst: Mo Feb 06, 2006 14:40 
Offline
DGL Member

Registriert: Mo Jan 16, 2006 22:00
Beiträge: 24
Hallo,

ich hab ein kleines Problem mit Blending.
Wenn ich die "normale" Blending-Funktion glBlendFunc(GL_SRC_ALPHA,GL_DST_ALPHA);
setze funktioniert das was ich vorhabe nicht richtig.

Mein Problem:
Ich habe eine Drehscheibe. Um diese Darzustellen habe ich 2 Texturen gemacht. Einen Kreis und einmal das Äußere des Kreises.
Bei den Transparenten stellen wird der Alpha-Kanal auf 255 gesetzt. Das ganze wird dann auf 2 Rechtecke gepackt und das Quadrat mit dem Kreis rotiert. Wenn ich jetzt die obige Blen-Func einsetze (natürlich wird erst der nicht-transparente Teil gerendert), sieht man das Quadrat mit dem Kreis als Schwarzes Quadrat mit dem Kreis innen - obwohl Alpha für den schwarzen Teil eigentlich 255 ist.
Wenn ich glBlendFunc(GL_SRC_ALPHA,GL_ONE) nehme, scheint der Hintergrund durch den eigentlich nicht transparenten Teil durch.

Was könnte ich falsch gemacht haben?

Grüße,
iso


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 06, 2006 15:04 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Apr 25, 2005 17:51
Beiträge: 464
öhm Farbangaben sind aber zwischen 0 - 1 bei OpenGL
0: Vollkommen durchsichtig
1: solide
alles dazwischen mehr oder weniger transparent

_________________
__________
"C++ is the best language for garbage collection principally because it creates less garbage." Bjarne Stroustrup


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 06, 2006 15:21 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Ja, bei Floats, aber bei nicht-Gleitkomma Werten wird immer der ganze Bereich benutzt. Läuft aber aufs gleiche hinaus: 0 is komplett durchsichtig, und 255 (bei UNSIGNED_BYTE) ist Solide.

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 06, 2006 16:03 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Kann meinen Vorrednern nur zustimmen 0 ist Transparent und 1 bzw 255 in RGB ist solid. Du müsstest bei deinem Bild den Alphakanal invertieren so dass die transparenten Stellen halt eben Schwarz (0) und die Soliden eben weiß (255) sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 07, 2006 13:52 
Offline
DGL Member

Registriert: Mo Jan 16, 2006 22:00
Beiträge: 24
Vielleicht habe ich mich falsch ausgedrückt - in meinem TGA mit Alpha-Kanal ist der Alpha-Teil an einigen Stellen 255 und ich kann trotzdem durchschauen. An denen an denen er 0 ist kann ich natürlich auch durchschauen, aber das ist ja nicht so wichtig. In Gimp wird mir der Alpha-Kanal blos Schwarz an den undurchsichtigen stellen dargestellt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 07, 2006 14:23 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
hm. Hast du es schon mit http://wiki.delphigl.com/index.php/glEnable#GL_ALPHA_TEST probiert?

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 07, 2006 14:50 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
iso8859-1 hat geschrieben:
In Gimp wird mir der Alpha-Kanal blos Schwarz an den undurchsichtigen stellen dargestellt.

Du meinst an den durchsichtigen Stellen? Weiß ist vollkommen sichtbar und schwarz ist unsichtbar. OpenGL dürfte das zwar nicht allzuviel ausmachen aber das ist eigentlich so üblich und sollte auch so gemacht werden.

In einem meinen Programmen blende ich mit folgender Blendfunc.
Code:
  1.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);


Bin allerdings kein Held was die Blendfunc angeht. Kann durchaus sein, dass es da noch ne sinnvollere Möglichkeit gibt mit dem Alphakanal zu blenden aber so richtig habe ich das bisher auch noch nie verstanden. Eines der Dinge mit denen ich auf Kriegsfuß stehe. ;-) Es ist leider (oder positiver Weise) so, dass du mit den paar Werten und den 2 Parametern ziemlich viele Möglichkeiten zum Blenden abfangen kannst. Also Addaptives Blending etc. Was die ganze Sache dann nicht unbedingt wesentlich einfacher macht.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Feb 07, 2006 16:32 
Offline
DGL Member

Registriert: Sa Jan 22, 2005 21:10
Beiträge: 225
Der erste Parameter gibt immer an, wie viel von der Farbe vom neuen Face genommen wird und der Zweite gibt an, wie viel von den Farben genommen werden soll, die bereits im Framebuffer stehen. GL_ONE, GL_ONE bedeutet z.B. dass die Farbe vom Face mit 1 multipliziert wird, die Frabe vom Framebufer mit 1 multipliziert wird, und dass dann beide zusammen addiert werden. GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA bedeutet, dass die Farbe vom Face mit dem Alphawert Multipliziert wird, der Framebuffer mit 1-Alpha multipliziert wird, und dann beide zusammenaddiert werden, also praktisch Color = Face.Color * Face.Alpha + FrameBuffer.Color * Face.Alpha.
GL_SRC_Blablubb ist also immer vom neuen Face und GL_DST_Blablubb vom Framebuffer. GL_ONE ist immer eins und GL_ZERO immer null (is ja logisch).

_________________
[18:30] tomok: so wie ich das sehe : alles. was nich was anderes ist als nen Essay ist nen Essay

hi, i'm a signature viruz, plz set me as your signature and help me spread :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Feb 08, 2006 08:47 
Offline
DGL Member

Registriert: Mo Jan 16, 2006 22:00
Beiträge: 24
@Lossy
Gimp zeigt durchsichtig als Schachbrettmuster an - sprich als wirklich durchsichtig vor einem Hintergrund der nicht zum Bild gehört. Sonst könnte man ja weiss nicht von durchsichtig unterscheiden.

Ich hab genau diese Blendfunc versucht - ich bekomme aber ein Ergebnis, welches nicht mit dem zusammenpasst das ich haben möchte. Wenn ich die Kreisscheibe einblende (ein Quadrat mit einem opaquen Kreis in der Mitte), dann zeigt er mir die komplette Textur an mit dem transparenten Teil in Schwarz. Dann sieht man natürlich, dass es kein Kreis ist der sich dreht, sondern ein Quadrat. Ausserdem ist dann nichts mehr durchsichtig.
Und das ist im wesentlichen mein Problem.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Entschuldigt die Aufregung
BeitragVerfasst: Mi Feb 08, 2006 09:00 
Offline
DGL Member

Registriert: Mo Jan 16, 2006 22:00
Beiträge: 24
Entschuldigt bitte. Aber ACD-See hat beim Skalieren den Alpha-Kanal aus dem TGA entfernt. Alles also im Lot. Ich danke für die nette und umfassende Hilfe.


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.020s | 18 Queries | GZIP : On ]