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

Aktuelle Zeit: Fr Jul 18, 2025 08:12

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



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: PNG Textur mit tiefem Alpha-Kanal
BeitragVerfasst: Mi Jan 21, 2009 00:44 
Offline
DGL Member

Registriert: Sa Jan 03, 2009 18:53
Beiträge: 22
Guten Abend!

Ich habe mir gerade mal wieder die Finger wund gesucht und sehe das Forum nun als letzten Ausweg. Ich habe mir eine PNG Textur erstellt, die einen Alpha-Kanal enthält, der nicht nur 0 oder 1 beinhaltet sondern ebend auch 0.01 ... 1.00 nur leider habe ich damit keinen Erfolg beim rendern. Bzw. es wird transparent, allerdings mit Treppchen, da mein Programm alle Pixel knallhart zeichnet die einen Alpha-Kanal Wert haben der größer 0 ist. Was aus folgendem Code ja auch abzuleiten ist:

Code:
  1.  
  2. glAlphaFunc(GL_GREATER, 0.0);
  3. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  4.  


Kann OpenGL eine solche PNG Textur wie gewünscht verarbeiten? Also mit einem Antialiasing Effekt?
So lade ich übrigens die Textur:

Code:
  1.  
  2. glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, TextureData);
  3. free(TextureData);
  4. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
  5. glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  6. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  7. glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  8.  


(In meinem Programm gibt es Runde Knöpfe zum raufpatschen, die über der Scene liegen sollen... die Treppchen an den Knopfrändern sind aber doof. ^^)

Gruß stoned4u


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 21, 2009 09:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich persönlich kann mir nicht vorstellen was du da gerade mit Treppchen meinst. Mach bei so etwas lieber immer ein Bild und hänge das gleich mit an. Lieber zu viel Informationen als zu wenig.

Ob deine Textur nun ein TGA, BMP oder PNG ist spielt für OpenGL keine Rolle. Denn in deinem Falle übergibst du die Texturdaten sowieso unkomprimiert. Wichtig ist da nur ob in den Daten auch wirklich ein Alphakanal enthalten ist. Also ob der Loader die Daten auch richtig geladen hat. Da das Übergeben als GL_RGBA aber wohl Problemlos klappt darf man da wohl von ausgehen.

Zum Darstellen von echten Transparenzen solltest du den Alphatest nicht verwenden. Denn der Alphatest kann nur ja oder nein als Sichtbarkeit zurück geben. Wenn du Semitranzparenzen haben möchtest, dann ist Blending genau das was du suchst. Damit kannst du einstellen wie sich der Alphakanal verrechnen soll. Und dafür ist (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) meistens schon genau die Richtige.

Du musst bei dir Blending auch entsprechend aktivieren und den Alphatest sicherheitshalber auch deaktivieren. Falls du den Alphatest vorher auch tatsächlich benötigst hast.
Code:
  1. glEnable(GL_BLEND);
  2. glDisable(GL_ALPHA_TEST);


Falls dir das nicht helfen sollte tritt wieder Abschnitt 1 in Kraft. Dann wäre zu mindest ein Bild von dem falschen Ergebniss ganz nützlich. Wenn nicht sogar ein bisschen mehr Code.

PS: Antialiasing in Texturen. OpenGL stellt in der Regel nur das dar was man ihm sagt. Wenn deine Textur also bereits eine harte Kante enthält, dann wird OpenGL daraus nur bedingt eine Weiche machen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Danke!
BeitragVerfasst: Mi Jan 21, 2009 10:30 
Offline
DGL Member

Registriert: Sa Jan 03, 2009 18:53
Beiträge: 22
Den Alpha_Test zu deaktivieren hat funktioniert =) Danke sehr für die Antwort und so schön schnell!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Jan 21, 2009 13:17 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Die Treppchen entstehen mit dem Alpha-Test, weil die Kanten dann keine echten Polygonkanten sind. Es sind Pixel, die einfach weggelassen werden, weil das Alpha-Wert die Kriterien nicht erfüllt (ist kleiner-gleich 0). Daher werden die Kanten nicht Antialiast (also nicht geglättet), wodurch dann die Treppen entstehen.

Das nur als erläuterung :)

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: Mi Jan 21, 2009 20:03 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
kannst du einen Screenshot posten. Ich würde den in die Checkliste im Wiki einfügen.

_________________
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  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] 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:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]